Five months to learn Software Development - how far do you get to? Mikk Tamme, 02 Jun 2020
You are not a programmer. You have a career, maybe in a totally different industry. But programming intrigues you, you decide to give it a chance. How does it look like?
Codeborne has hosted interns from the Vali-IT/Choose-IT program for several years already. Mikk Tamme shares a detailed insight of this experience.
For years I have been aware of Software Development bootcamps. In the US and UK, it is a big industry. People who have not learned Computer Science and wish to change their careers can take approximately 4 months and learn to become Software Developers. Places like General Assembly, Flatiron School, and many others offer both on-campus and online bootcamps.
A few years back I started a very serious and detailed online program with the Launch School, but starting to learn something new and complicated alone at home needed a bit more discipline than I had at the time. However, with every new assignment I took on in the business world, the importance of understanding how software development really works became clearer and clearer. It is just all pervasive nowadays and I would like to understand how the world works. Who wouldn't?
Internship at Codeborne
After the initial study period came the internship. Three of us had great luck of having Codeborne offer us places for our internship. Codeborne has a reputation in Estonia — for being a unique development house, for having very strong quality, and for taking care of their interns really well. They kindly offered us right away to double the usual 8 weeks of Vali-IT internship time so we could learn much more and develop further. And oh, how it was worth it.
Our time in Codeborne started off with a month of exercises, starting with simple and getting more complex. Software development is like a craft — practice is extremely important. Moreover, it is important to go back to the basics again and again to deepen the understanding. To support this process we had two mentors. They are some of the most experienced Software Developers Codeborne has. Every day we had an hour or two for code review and if we would get totally stuck, we could always ask a question.
Code reviews are great tools for learning
The code reviews were the main way of mentoring during our internship and we found it extremely beneficial. Every time one could learn more and over the months we could start making comments and asking questions about our fellow interns code also. There seems to be an endless way to improve the code so one of the tricky things to learn is to be able to decide when it is good enough and the value from working to improve it more is probably smaller than adding new features. Over the months of practice and code review with senior developers, starts to dawn on me how to make such decisions.
One of our interesting exercises was to "manually" build a HTTP server. Usually nowadays one would use ready-made libraries for this but to enable us to understand how the traffic really works "under the hood" we spent a couple of weeks developing and refining get, post, put requests by writing the code from the scratch. It really illustrated well one of the key principles taught by our mentors in Codeborne - Really understand what you are doing. If you copy some code or use a library, take the time to understand how it works. Know what your code does.
The second part of our internship we were actually working on a live application. A website that gets used every day by people of Codeborne for time tracking. It is an application that has been developed by the previous groups of Vali-IT interns at Codeborne. A not too complicated application with a java back-end and Angular front-end but still a big step up from working on standalone exercises.
Exercises can help to develop algorithmic thinking, introduce the correct syntax, teach how to write good clean code, and be a great source for practice. But working on a production application that people use every day is totally different. One needs to think about how do people use it, how to make it usable and nice, to plan to not disturb their work with updates, to understand how the deployment works with Docker and Jenkins, how back-end and front-end work together, also with external APIs and libraries, how to find hidden bugs and their causes, and how to write automated unit tests that can show that the application is broken somewhere.
What did we learn during our internship in Codeborne?
During this period we got to experience many of the key characteristics of how Codeborne works - pair programming, test-driven development, really agile environment, emphasis on clear and understandable code, the need for the developer to understand the full life-cycle from client wishes to deployment of the code in the production environment.
Codeborne is hard-core on pair programming. Pretty much nobody works alone. The logic is that so much of writing good code is about thinking and discussing. So having two people work on the same thing together, helps to make it more efficient and bring about an outcome with better quality. It also helps for more junior members of the team to be immersed in how the more senior developers think and solve problems.
It took some time to learn. One needs to be very flexible when working in the pair programming environment. One needs to also be willing to be vulnerable by taking the time to ask simple questions or think things through even if the other person seems to already understand. As interns we were googling and reading up on Stack Overflow about any non-standard situation, and there were many of them. I imagined that pair programming would be especially effective when one does not need to spend a majority of time googling but can be writing code but even we found pair programming and actually working on the same problem together to be very beneficial.
Another great practice of Codeborne is test-driven development. OK, not always test-driven, and for beginners like us, it seemed a bit difficult to first write the tests, but to have every bit of our code covered with tests was instilled in us. Actually, in the last weeks of our internship, we might have even spent more time on tests than writing code. But as tests enable us to make sure that what we developed is working - now and in the future - every minute spent on the tests seems to make complete sense.
Our work was organised in one-week sprints. Every week we had a backlog of stories or tasks that needed to be done. Every week in the iteration meeting we showed the progress and showed the updates and new features. It was possible to deliver so quickly because of the daily feedback we got from our mentor.
More than just one hat to wear...
Finally, we needed to learn a lot about something that strictly is not software development but more in the area of DevOps or UX and analysis. For example, how to set up automated tests in Jenkins and Docker so that when you add your changes to the live environment that everyone uses, all the tests would first be automatically run and only working code would be given to the users. On another end of the spectrum, we needed to really understand what the client wanted to do with the software and how to translate that into the technical capabilities we have with the code and architecture.
"As a bonus" due to a certain global pandemic we got to do a two-month chunk of it from home offices and also learn how to do all this teamwork and learning remotely. It taught that actually it is possible to work in a disciplined way from home. Also that having the three of us on a Whereby chat working together or even on separate tasks almost felt like being next to each other in the office. But it also taught that having face to face or shoulder to shoulder time with people is really beneficial and enhances learning so much more.
To finish off our internship we had a very intense week of being tested and pairing up with some of the most senior developers in Codeborne. After many weeks of working mostly in the group, each of us submitted our own version of a homework exercise that anyone wishing to work in Codeborne will have to do. The people evaluating the works said they were very different. This shows how much creativity there actually is in software development. A huge number of different solutions can be correct.
Working for a couple of days next to some of the most senior developers in Codeborne as their pair-mates on real client projects was also amazing. It was like drinking from a fire hose. As the tempo was much faster. Still the time was taken to think things through but because of the experience and practice, so much of the writing could be done without googling (although even with senior developers google is a great friend) and debugging would go much faster also.
So how far did we get with these five months?
I'll answer this by sharing some memories.
- The first time I preferred to read java official documentation over some blogs as I felt confident enough to understand the technical language. I felt elated.
- The moments when I found myself thinking I know how to do it but then my mates actually showed better solutions. There were ample opportunities to learn to let go and be flexible.
- How much more I know what to google for and which answer to read than five months ago - A real progress for a starting developer.
- Understanding how much more there is to learn. A good software craftsman will really need to learn every day till they die.
- Being thrown into the Angular code, a totally new set-up for me and feeling completely lost, and then after a few weeks, feeling I am starting to understand it and not being so lost when seeing the Vue and jQuery code in the client project days.
- Having a chance to explain to a friend who does not know much about IT what it means to deploy, to mock, to use Git, what a dependency is while having a senior developer friend listening and approving my explanations.
- Being in awe by the kindness and help our mentors gave us in teaching us.
It has been an amazing five months. Learning in the classroom of Vali-IT and in the workplace at Codeborne - probably one of the best and unique software development houses in Estonia - with all the great Software Crafts(wo)men.
It is just the beginning of a long and rewarding journey but what a strong beginning it has been.
After seeing in real life what superb practice of Software Development looks like and learning from the best, the journey can lead deep into becoming a great Software Craftsman, or to machine learning and AI, or to software engineering management. Only time will show.
Interns Spring 2020
Studied Business and Economics at Stockholm Business School in Riga
Studied Environmental Biology at Middlebury College, Vermont, USA
Studied to be an Officer of the Watch at Estonian Maritime Academy