From biologist to web developer in 2 years. My own AMA

5 months have passed since I got finally hired for a company based in Valladolid (Spain). Now I’m a member of a team which uses PHP, Symfony 2.8 and MySQL for surveys data representation.

On this months I’ve refactored their code base to follow better code practices, increase performance and implementing the automatization of scss compilation/minification. Besides, I’m the main developer for a whole project. Is a pretty good start for someone who didn’t know anything about development 2 years ago. Don’t you think? :D.

So I think is time to be one of those new developers which blogs about the paht followed to get his first job.I don’t want to bore you writing about all the steps I made, though (they are already written in this blog). So, I’m going to keep it simple and just go straight to the important stuff (which is why you clicked the link in the first place). These are the questions I had during my journey and what are the responses I finally came out with.

1.Which programming language should I start with?

This is a very difficult one, and the very first anyone asks himself once they’ve decided to give a try to this development thing xD. The difficulty of this particular question comes because is such a generic question that there’s no straight answer. It depends a lot of what are you trying to accomplish. Thus, the first thing is to ask is actually: What I want to develop? in my case I started with Python which is really beginner friendly and because at first I was aiming for Bioinformatics (which I no longer do). I would wrap the first choice in these 3 categories: Web Development, Mobile development, Video game development. Of course there could be more that these 3, but with these 3 we can gather the majority of the current industry.

  • For web development I’d suggest starting with : HTML/CSS/Javascript
  • For mobile dev: Java
  • For videogame dev: C/C++

Start with one of these and try to stick with them as much as you can until you think you have to move on. Learn a language at the beginning is quite simple, there’s a lot of material out there for beginners. This is not the situation when things start to get complicated, though. So, we are tempted after learning the basics to swap to another language and the process starts again. Don’t do that as much as posible, really. I got really overwhelmed because there where a lot of cool languages and tools to learn that I used a lot of my vital force jumping from technology to technology without achieving anything really. If I’d spend more time with a single language to reach the advanced topics sooner, my life would have been much more easier. Really, I mean it.

When it’s time to learn about frameworks, do a research for you desired job position and see what they use. I almost jumped straight to learn React as JS framework. Turned out that no one in Spain uses it, so it would have been useless. That’s why, for increasing your job opportunities, look for the tools used in your surroundings.

If you still can’t make up your mind, I would suggest you to pick the language/framework/whatever that makes more easy to you to find resources and people to talk about (online communities, meetups, etc.)

2.Self driven online education or formal education?

If you can, I suggest to go for the formal education, at least here at Spain makes the job search much more easy. It also provides you with some knowledge level that companies will recognise at once. It may sound discouraging if you are willing to be 100% self taught, but the reality I know is that the little piece of paper matters much more than I’d like. Doesn’t mean you can’t get a job without it, though. It just will be more hard for you, that’s all.

In my case I did a profesional education in Web development (2 years long). As educational system, it’s completely outdated and disappointing (I had a teacher that didn’t even know what stackoverflow was). But as I said, the paper matters. However, the good thing is that at the end, I did 3 months of internship that gives you real life experience and even the opportunity of being hired afterwards (not my case, though).

So, formal education is important, yes. Nevertheless, I strongly encourage you to don’t stick with these “oficial” programs. Complement them with the education of your choice. And by this I mean books, online communities, MOOCs… you name it. What really transformed me into this web developer challenger, was all the self-learning I did. Podcasts, FreeCodeCamp, Udemy, Udacity, Coursera, CodeNewbie … all this sites are bookmarked in my web browser and were what filled out my Curriculum vitae, since I didn’t have prior experience. Besides, I made my own specialization (JS developer) with these resources, which is important in this industry. Specialists over generalists (Oh! This reminds me so much my ecology classes :P)

So, for being clear about this question which I think is really really important. Formal education is needed for achieving certain salary level (or even the job), go for it and complement with the online education you want. Besides If the complementary resources can be strongly related with your formal education (languages and tools), the better (because this way you can concentrate more your efforts). Sadly, this is hardly the case (there is little to study about web development in computer engineering, for instance) and it’s ok if you self-study anything less directly related.

3. Should I have my own blog?

Yes!. That was something I first hear at CodeNewbie and then confirmed by Scott Hanselman. At the beginning you might feel lazy about doing it, I felt it as well. However, it was one of the greatest decision I’ve ever made. This is why:

  1. Probably it has been noticed already that I’m not a native English speaker, so starting this blog in English have done the difference for my skills in this language so needed for a developer.

  2. It’s the best presentation letter for any company. It presents yourself as a proactive person, shows the technologies you work with, projects.

  3. It’s a space you own on the internet, so you own your content and not any company with a TL;DR privacy terms (aka. Facebook, Medium, Twitter).

  4. It works greatly as learning system. Forcing yourself to explain some new topic to other people helps you to find out if you get the idea or not about what are you studying.

  5. You can use it as an archive for all the things you learn. This is something that I’ve been thinking lately over the months I’ve been working. There’s no need for extremely long blog posts, small tips or problem resolutions could be equally good (or even better).

4. Formal education + self-study + write a blog … when do I get spare time?

I want to be concise on this one just because there are a lot of posts talking about the work-life balance on internet. The 2 principles I follow are:

  1. Have a to-do or priority list to decide what to work at during your productive time

  2. Set a time when you simply stop working and do whatever you feel like it. In my case is 21:00h during the week and after lunch during the weekend.

5. Which IDE use?

The one you like the most but with VIM integration xD.

Nowadays I’m using the simplest tools I can for developing. The thing is that the IDE is not a unique program (and there’s none that will match all your actual and future needs), so using little programs for every task allows me to change them freely depending on my needs constructing and customizing my own IDE.

Currently I use SublimeText3 in vintage mode (Vim mode. Yes I meant it at the first sentence), the git console and xampp. The important thing is using a good editor that allows you to expertise on it and be as productive as you can. By using sublime complimented with more tools I have that text editor, and by using it in vim mode, it allows me to learn more about vim and write on any Linux shell when there’s need to (Like git commits). So I almost have the feel of being on the same text editor all the time.

Farewell

I think this is enough for now :D. Thank you for reading. However, if you have any question you would like to ask, this is kind of an AMA so, feel free to let me a comment and I’d be glad in answering as good as I can.

CIPF Internship – week 1. Meeting Polymer

Finally the day came. The 6th of April I started my internship at the CIPF, in the System Genomics lab (The bioinformatics department). Now, during 2 months and a half, I’m a happy member of the team lead by Joaquin Dopazo =). If you want to know what kind of dark magic I conjured to get here, I explained it in this previous post.

This first week has been mainly of adaption. To know the people that was already working there, configure the computer, read documentation and so on. It wasn’t until the Friday when I started to actually write some code.

But my mentor Francisco Garcia have had work to do as well with me (meaning he had to decide what should I learn and what should I do). This is because I’m not a common internship student. Almost everyone there is a Master student, PhD student and so one. But I’m the first case of a biologist who studied a web dev vocational training in the department. The first idea he had was to follow the common training they have for the master’s a bachelor’s students. And that was totally fine for me. I was going to learn about the databases they use and analyze biological data with R.

Nevertheless, following one of the advices Francisco gave me, I started to talk to the people there for knowing what they do. That’s how I met the software engineers Alejandro Alemรกn and Francisco Salavert Torres. After hearing about my background, they offered me to join them and help to develop tools for the department instead of being analyzing data. Basically they develop web tools using a brand new technology called Web components. The name rang a bell but, to be honest, I had no idea what it was.

The brief summary is that web components allows you to create your own html elements, just like that. Instead of having just the default html elements (like <input>, <table> or the more modern <video>), you can define your own with their own styles and business logic, all encapsulated which is great in so many different ways (e.g: avoiding the annoying CSS collisions). Then, you just have to import the html (yes! html imports are here!) and use your new element as you would use any other.

It seemed too cool for me to turn it down, so I accepted without hesitation.

That’s how I spent the next 2 days reading the Polymer documentation. A framework which helps to create web components and allows the implementation in browsers which don’t support this feature yet (basically everyone but Chrome).

I found the docs a bit dense, but manageable. Furthermore, it’s easy to find on the web extra resources to understand the Polymer workflow. I’ve seen and recommend Polycast and the Polymer Summit 2015.

Once I finished all the docs and feel confident enough to do actual work, I spent the Friday developing my first Polymer element. An element which emulates the window.confirm() behavior. It has to pop up block the website for the user and when the user either confirms or cancel do something. The tricky part of this is that you can’t actually stop the JS from running (which is what the confirm() does). Therefore I had 2 options:

  1. Work with JS promises.
  2. Work with callback functions.

I went for the callbacks just because I think they accomplish better the task of simulating that the code stopped from running. Besides, I made the cb function receive a boolean parameter which represents the response of the user. This allows to add an if-statementto callback function to execute a piece of code or another according to if the user clicks accept or cancel. A simple example of execution would be:

var myElement = document.querySelector("my-element");
myElement.confirm("Are you sure?", function(response)}{
    if(response){
        console.log("The user has accepted");
    } else if(!response){
        console.log("The user has canceled");
    }
});

It has been a great starting and I’m enjoying so much doing web development with polymer elements. Web components are supposed to be the future (as other many things that in the end weren’t ๐Ÿ˜… ) and I’ll have already job experience with them when the time comes (I hope so ๐Ÿ˜œ ), so what else could I ask for? Definitely web development is my thing (even though I wasn’t so sure at the beginning), and doing it in the context of a bioinformatics department at a research center is just as great as it sounds.

Stay tuned for further updates on the internship ๐Ÿ™‚

SubsSend. Python Script for sending emails with attachments from the console

This is a little script I made for sending through the console emails with attachments. Originally I developed it for sending subtitles, but it can be easily modified for sending any kind of files. For using it you will have to set mailx on your UNIX computer first.

#!/usr/local/bin/python3

'''
Author: Edgar S. Hurtado (http://edgarsh.es) 2016.

This script sends all the Spanish subtitles by email founded in the current
working directory.

Feel free to edit and use it.
'''

import os
from subprocess import call, Popen, PIPE

'''
Obtain a list with the subtitles files names.
'''

cmd = "ls | grep 'es[0-9]*\.srt'"  # Change the RegEx for sending other kind of files.
p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
output, err = p.communicate()
output = output.decode("utf-8").split()
print (output)  # For feedback

# Prepare attachment string
if len(output) > 0:  # In case there are no subtitles found

    attachmentString = "(uuencode " + output[0] + " " + output[0]
    for i in range(1, len(output)):
        attachmentString += ";uuencode " + output[i] + " " + output[i]
    attachmentString += ")"

    # --Mail settings--
    subject = os.getcwd()  # The name of the current folder as subject

    to = "foo@test.com" # Change for the wanted email

    # Send mail
    call(attachmentString + " | mailx -s '" + subject + "' " + to, shell=True)

else:
    print ("No subtitles found")

I recommend setting the script to your PATH for running it at any folder.

See on GitHub.

Starting with RaspberryPi. Set up and connect remotely

rbpi-with-logo

This Christmas I was gifted a Raspberry Pi 2. It’s a credit-card-sized computer which is very popular among programmers. It’s like giving a Lego kit to a children, but for programmers. You can program it for doing a wide range of tasks.

However, to be honest, I should say that I didn’t know very well what to do with the RBpi (I was suffering overchoice).That’s why I started to search info about, and found some very cool projects like a magic mirror or this absolutely awesome R2-D2

After dreaming about creating my own astrodroid (some day I will!), I began to think about more affordable projects for the newbie I am. So, the first project a newbie with a RBpi must do is make it work. Let’s go.
Continue reading

Fix MySQL not starting with XAMPP in OS X

After having been working with my MySQL and sleeping my MacBook Pro without stoping all the XAMPP services, when I tried to restart the MySQL server, it didn’t work.

First I tried to start MySQL from terminal:

sudo /Applications/XAMPP/xamppfiles/bin/mysql.server start

It doesn’t work either, but at least I got an error message:

ERROR! The server quit without updating PID file

The solution for me was going to XAMPP and follow these steps:
1. Select MySQL Database
2. Click on Configure
3. Click on Open Conf File
4. In the file opened, write below [mysqld] the line: innodb_force_recovery = 1
5. Save and click on Restart All.

Repair MySQL from XAMPP

With this steps I forced innoDB to enter in recovery mode and solved my problem.

For further information I got my answer from this stackOverflow post and this article from the MySQL docs

First FreeCodeCamp Spanish Chatroom Meetup.

fcc spanish chatroom

Last Saturday(24-01-2016) most of the more active members in freeCodeCamp Spanish chat met throughout Google Hangouts, and I really loved the experience.

Maybe you’re thinking, what’s this guy talking about, freeCodeCamp? Let me do a short explanation. freeCodeCamp (FCC for short) is a really nice web platform where people all over the world are learning web development. More specifically, the campers (that’s the name for the users of FCC) learn full stack web development based on JavaScript. However, this isn’t the main reason why I like FCC. Which is really amazing with FCC is the huge community gathered.
Continue reading

The Pragmatic Programmer

The Pragmatic Programmer cover

One of the most recommended books a code newbie can find when browsing through internet is this book. A simple search on Google typing books every programmer should read reveals this fact (e.g: 1, 2, 3). However, I always thought that this was a specialized book for professional programers, something currently out of my scope.

Nevertheless, I heard one of the authors of the book, Dave Thomas (@pragdave), in two episodes of CodeNewbie (part I, part II) and he was very convincing in saying that the newbies could as well take advantage of reading it. Therefore, finally I made up my mind and read it. It took me over 2 months to finish it with a path of 30 min – 1 hour of reading per day.
Continue reading

Set Vim to relative numbers

Finally I listened to @ColbyCheeze in this video and set VIM to use relative numbers. This is that instead of showing me the number of each line, VIM shows me the number of the line relative to the position of my cursor.

Vim with relative numbers

However, I need to know from time to time the absolute number of the lines (i.e. I have to debug an error that my compiler says that is on line 45).

The way I did it was by activating on my vimrc both styles:

set relativenumbers
set numbers

This way, I see the absolute number of the line my cursor is.

Vim with both absolute and relative numbers

I found this trick by reading the blogpost: Vim’s new hybrid line number mode

I hope this could be of any help to you.

Thanks for reading.

Starting my first Side-Project: Robin

pit-roig logo

bird-ringing group Pit-Roig logo

Every programmer I’ve read or spoke with insists on the importance of having side-proyects. For example, John Sonmez (from Simple Programmer) claims that not working on a side-project is one of the 7 mistakes we are doing on our programming career and CodeNewbie has a category on its forum dedicated to side-projects. So it seems that they are important, but why?
Continue reading