x
This website uses third party cookies exclusively to collect analytics data. If you continue browsing or close this notice, you will accept their use. The EU now requires all sites to display this banner which confuses users and does nothing, actually, to improve your privacy.
Read more on why this law is ignorantLearn about this website's cookiesDisallow cookies
Carlos Fenollosa

Carlos Fenollosa

Engineer, developer, entrepreneur

Carlos Fenollosa — Blog

Thoughts on science and tips for researchers who use computers

Craftsmanship

January 10, 2015 — Carlos Fenollosa

As an engineer, I enjoy fixing things, disassembling gear and learning how it works. I'm sure many of you opened watches, pens or other small electronics as a child, only to find that there is "that extra piece" after reassembling them.

My grandfather was an artisan, and I still have some of his pieces. They are sensational and reflect not only the image he was trying to create, but also his general mood, recognizable by observing the strokes, edges and paths that the gouges followed. That's why I prefer looking at an artist's collection rather than a compilation, it's easy and shocking how they—and their environment—evolve over time by looking at their works.

For me, however, fixing a Game Boy does not resemble creating a beautiful sculpture from a piece of wood. Basically, I've never had the manual ability nor the tools to build real-world things from scratch, and that's a skill I envy. Fixing or improving existing things à la McGyver is one thing, but producing something from scratch is an entirely different expertise. That's why I love looking at other people's projects at the DIY subreddit.

But, in some way, programmers are DIY masters, especially for small weekend projects meant to scratch an itch. In the zeros and ones world, crafting can mean writing a script to automatically parse gmail for youtube links you send to yourself from your cell phone, downloading them in the background, converting them to mp4 and saving them into iTunes, so that they automatically get pushed to your iPad and are ready to watch when at home.

Not only the result may be notable, it also carries a little bit of yourself in the code. Which language did you use? Did you feel lazy and wrote it in Bash, or wanted it to be robust and wrote some Python? Is it all on a single function or split into modules? How did you name the variables? Are there comments and documentation or is it a quick hack?

Comparing code to other art forms is a cliché, granted. But when I look at my /usr/local/bin/ folder, I don't only see some scripts, I also see my own evolution regarding programming languages, project ideas, organization, skill, and why not, my attitude.

Ah! I see that around 2011 I stopped using backticks in Bash scripts and replaced them with command substitution. Then in 2012 Python scripts start replacing Bash. Around that time I learned Git, because I can see a lot of helper scripts there. I guess I didn't like it back then since I see a lot of "wtf" comments.

There are some unfinished projects. I know because the files aren't executable. Upon opening them, yes, the code is only half written. Will I pick them up someday? I really don't know, but I love remembering that three years ago I was working on an audio synchronization project. I had completely forgotten.

A programmer won't likely get his code displayed at an art gallery, it probably wouldn't even make sense except for a few other programmers. But observing the evolution of your work is a good self-reflection exercise. Reading other people's code is probably a must, but reading your own, even if it makes you cringe a bit—God, was I really using Hungarian notation?— will let you see how far you've come. It's like looking at that famous Microsoft staff in 1978 picture. A bit shameful, but necessary to let us all remember that even Bill Gates worked his way up from the bottom.

Take some time to look at your crafts from some years ago, and take pride in them. They may not be a beautiful table or lamp, but they treasure a little bit of yourself from the past.

Tags: art, programming

Comments? Tweet  

Startup school

December 05, 2014 — Carlos Fenollosa

The amazing How to start a startup class just finished today.

How fortunate we are to live in a world where the most successful minds of our time can teach the whole planet through the Internet, and decide to allow that possibility.

Open education isn't just a fad, it's been a fight for a long time, and now it's starting to root strongly. Thanks to all who have joined on this fight, the world is becoming a better place.

If you're interested in education as a source of progress, don't miss the XPRIZE episode of the Tim Ferriss podcast, definitely my favorite podcast now

Tags: learning, startups

Comments? Tweet  

You are not late

October 12, 2014 — Carlos Fenollosa

Can you imagine how awesome it would have been to be an entrepreneur in 1985 when almost any dot com name you wanted was available? All words; short ones, cool ones. All you had to do was ask for the one you wanted

[...]

But, but... here is the thing. In terms of the internet, nothing has happened yet. The internet is still at the beginning of its beginning. If we could climb into a time machine and journey 30 years into the future, and from that vantage look back to today, we'd realize that most of the greatest products running the lives of citizens in 2044 were not invented until after 2014

You are not late

Tags: internet

Comments? Tweet  

You only do it when nobody else will do it

October 03, 2014 — Carlos Fenollosa

Maybe the difference between a junior and a senior programmer is that the first will sometimes say "I don't know how to do this", while the second will always say "Give me a week".

When you finish college with a computer engineering degree, everything seems possible. You just learned how to design a computer from the zeros and ones up to the applications. From logic gates up to a CPU, from TCP to HTTP, from assembler to Java.

Then, time passes, you get a regular job, and regardless of its awesomeness you start forgetting stuff. Furthermore, you discover super smart people who are light years ahead of you, and for some reason, your mind thinks of them as superheroes, almost magical creatures who can write an ultrafast x86 emulator or make a disk drive play the Imperial March

Don't get me wrong, these are amazing feats. But psychologically you start to feel dumber and dumber up to the point where you believe that the only thing you can aspire to is write webpages and some normal stuff. Even if you have great skills and do a great job at a great company, it's difficult not to feel just a tiny peg of the machine.

I didn't know how to do anything else, and I thought I'd fail if I tried. In college, I suffered a lot with some courses, and to date I still don't know how I passed. But the truth is that college is very dense, and without all the stress from exams and projects, and thanks to age and experience, things actually get easier to learn.

That's why side projects are important.

Three years ago I launched my first successful project to the Internet, bashblog. It's no big deal, but it's a commitment. People use it, contribute patches, discuss ideas, and I have the responsibility to make it work.

Then I started learning things that have always tickled my curiosity. It started with functional programming, one of the academic topics which has been discussed since the 60s but never took off. Then I did more courses on astrophysics and statistics.

This year I left my job to take a sabbatical and start new projects. In some countries it's normal to take a sabbatical before starting college to travel and learn. But almost nobody thinks about a sabbatical when you're 30. You can choose a wrong career path when you're 18 and fix it, but the 30s are critical and one needs to be really sure that they want to spend the rest of their life doing what they love.

I have recently found, don't know how to put it, some change of mind, new strength, inspiration. I want to learn how to write an OS. I started writing mobile apps. I want to launch a product. I'm contributing to an industrial patent to do really cool stuff with cellphones.

As usual, every of these projects hides many challenges. I've had to read RFCs, learn how to extract voice patterns from an audio file, write device drivers, deal with lawyers and read formal documents 1

We live in the information age. There are plenty of resources, some of those University-grade, to learn new skills. Discipline and planning can go a long way. There is no excuse.

Github and other websites have also made it effortless to collaborate with total strangers. It really makes me happy and proud to see other people commenting on things I've done. Years ago you had to go to a computer hobbyist meeting to show your work, now you can do it online... and others will improve it.

Stack Overflow will provide code samples and guidance. I've now started hearing undergrads utter "Did you really code programs without Stack Overflow?" in the same way that I used to say "Did you code programs without the internet?" to people who had to read manuals and go to a library.

Hacker News and Reddit can guide you on what's cool nowadays. Live in the future, then build what's missing.

I guess that it's comfortable to dismiss some ideas just because "we don't know how to do it". And that's a waste of our university degrees. We have some responsibility to do cool stuff. If we don't build it, who will? If we can build it, why wait? If you don't have the skills, learn them. Just Google it. Work on it for a week, and you will succeed.

Do you miss the adrenaline rush that you used to get when you first discovered something? The "oooh" and the "aaah"? Learn something new, something radical, something cool and futuristic. Start a project, and release it. It doesn't need to be complete.

The greatest force that pushes us to build things is the knowledge that nobody else will build them for us.

~~~~~

[1] One of the multiple things that managers usually do and engineers don't appreciate enough

Tags: programming, life

Comments? Tweet  

Creating an OS from scratch

September 29, 2014 — Carlos Fenollosa

I am a Computer Engineer major, so I took some classes in college on how to build operating systems. For many reasons, I don't remember most of it, but it is a world which has always excited me.

There has been a recent post on HN which points to a very simple and detailed tutorial on how to write an OS from scratch and it has really inspired me, so I decided to create a Github repo to publish the code at the same pace that I learn to write it.

It is not for everyone; rather, for CS/CE majors who were overwhelmed by college but always were curious about what happens from the moment you turn on your machine up until when an application loads.

I split each "lesson" into one-concept increments, so it can be easy to follow for people like me who don't have a lot of time and brain power to learn at a University pace. This is a work in progress, again, I publish code while I learn and extract it from the original document and other internet resources, so expect it to be updated regularly!

Tags: software, hardware

Comments? Tweet