When you are new to software development, there is always the challenge of determining which of the many software or framework programs you should learn first. Everyone has a different perspective. Some say you should learn what they learned. Some say there are specific programs that all beginners should start with. And, still, others suggest that the program you start with is irrelevant, as long as you start somewhere. So, how do you wade through the plethora of programs and information out there to find one to begin with that makes sense to you? Or should you randomly choose one and begin?
Episode 36 is part 2 of choosing the right program to learn. Listen in to our panel of experts, Reuven Lerner, David Molina, and David Gatti while they discuss the ins and outs of how to make the decision that’s right for you and ultimately begin your journey into the world of technology and software programming.
David Molina’s Bio:
Dave Molina is the founder of Operation Code, an organization that helps army veterans become coders. Dave came on the show to discuss coding boot camps, the military, software education, and what it’s like to become a civilian technologist after spending years in the army.
Reuven Lerner’s Bio:
Reuven created one of the first 100 Web sites in the world just after graduating from MIT’s computer science department. Today, Reuven spends most of his time training programmers at companies such as Apple, Autodesk, Cisco, EMC, HP, SANDisk, and VMWare in four open-source technologies: Python, PostgreSQL, Git, and Ruby. Reuven teaches in Israel, China, Europe, and North America, as well as online.
His monthly column in Linux Journal has appeared monthly since early 1996. His latest ebook, “Practice Makes Python,” is aimed at Python programmers who want to improve their fluency in the language. Two new ebooks, about Regular Expressions and technical training, should be ready in the coming months.
Reuven curates DailyTechVideo.com (offering a new conference talk about programming each day), and is a permanent panelist on the Freelancers Show, a weekly podcast for independent consultants. He also edits MandarinWeekly.com, a weekly collection of links and resources for anyone learning Chinese.
Reuven has a Bachelor’s degree in Computer Science and Engineering from MIT, and a Ph.D. from the Learning Sciences program at Northwestern University, where he created and studied collaborative online learning communities as the developer of the Modeling Commons.
Reuven lives in Modi’in, Israel with his wife and three children.
Please say hi to Reuven on Twitter.
David Gatti’s Bio:
David Gatti began his career in IT as a Systems Administrator. He learned how to code in PHP out of boredom, and made some simple internal tools to help him while managing the company network. He later became a blogger and wrote about mobile technologies before the iPhone came into existence and PDAs had cellular modems. David also wrote the CMS for the website itself when WordPress was first starting. Then, he began working as a web developer for a company that did simple Facebook games.
After his initial experience, David ported a Windows Mobile app to Android 2.3. He then became a Brand Manager for a mobile game company and a Marketing Director for another company and at that company – he transitioned to Developer Relations Manager and worked for two companies with this title. It was a job that he fell in love with.
But, while hunting for his next opportunity, he struggled to find the right company. Out of frustration he created Simpe.li (simply) so he could keep doing what he does best – Development Relations Management done right.
Episode Highlights and Show Notes:
Arsalan: Hi everyone. Today I’m bringing you part two of our discussion panel. The discussion is about choosing the right programming language. If you are a new or aspiring software developer, one of the challenges that you face is where do you focus your energy? So, today we are going to discuss this with our panelists, Reuven Lerner and David Molina. Can you guys introduce yourselves?
David M: Hi everyone. Dave Molina, here. I am self-taught. I started here a few years ago with Ruby and building on Rails, and that ultimately led to building the bilingual hire app, and later the Operationcode.org, which is an open source project that helps military veterans learn to code. I mostly stick with Ruby, but being the Jack of all trades. I can hack in Jekyll and middleman. I play around with Google locally. I’ve fired up Ember before. I don’t have a strong suite in any of the languages, but I can help navigate and get through it.
Arsalan: Do both of you actively code these days?
Reuven: I would say yes. But, in my case, in the last few years, I moved more and more into technical training. So, first of all, I do coding during my training classes. I’ll do live coding and of people asked me questions, I’ll often write a program for that. I do a lot of coding to experiment for stuff for research things. Actual software development projects, I tend to stay more on the sidelines with my clients, and they tend to be more private things. If I need to solve a problem, all right software for it and I’ve got some things cooking. But, client-based software work or company based software work, that has pretty much become an old thing over the last few years for me.
Arsalan: Okay, let me throw this question out there. Is this a good topic for discussion, because that’s contentious? I could say about programming languages, who cares just learn whatever you’re doing. Just look at the problem to guide you and learn that language or maybe you don’t need a language, maybe you need a framework. Where do you guys stand on that?
Reuven: Look, I think you’re going to have some very strong opinions, and you’re going to hear some people say you should choose a language and you should choose my language while others say just get started. I think I’m somewhere in the middle where I would say that it doesn’t matter and just get started with something, but there are certain languages that will get you thinking in the right way or would just be an easier on-ramp to the world of programming than others.
David M: I would say start being useful to yourself and those around you. When I was in the Army, we were in a CMS platform called .Net Nuke to run our.mil. So, I had to learn quickly, not just HTML because I already knew that, but also the framework. How to navigate it. How to add new forms. How to build new categories. Those were simple things to do and it was a simple manual that you read. You receive training on it, and they did some screen sharing with you, but otherwise, you got right in on it.
David M: Once I exited, I wanted to build up the bilingual hire app. When looking at the different programming languages, what it really came down to what was the most seamlessness? I had been messing around with PHP and MySQL, and I really didn’t get anywhere. I dragged it on for the longest time in addition to iOS. When I ran into Rails, it just clicked. So, I guess what I’m trying to say is, whatever the problem is that you’re trying to solve, find the tool that will help you solve it and if you’re butting your head with something, you might want to step away from it and see if there’s another tool. If I had to look at it before, I wouldn’t have spent a year learning PHP in my SQL because I had already come from WordPress. I would’ve just skipped it over.
David M: After sticking with One Month Rails, I just stuck with it. From there, I kept learning and building on it until I got better and better at it. I would say stick with whatever the problem is that you’re trying to solve it don’t spend too much trying to get the universe to fit you.
Arsalan: I think that there are two different considerations. One is that you are doing a job right now and somebody is paying you to do work for them, maybe some programming. Now, a programming language is being used. If you’re in a.net job you’re probably using something like C sharp or VB.net. That’s pretty much guaranteed. From your point of view, you’re learning and you could go ahead and learn the advanced features that you’re required to learn anyway. Or you could say that this is great, and you’re learning all this here, but this is all one-dimensional. Maybe you need something that is multi-functional. So, one thing is directly related to your job performance while the other is more of a personal interest. Where do you see these things?
David M: I would say this. Ultimately, at the end of the day, we all want to do this. This is the craft that we’ve chosen. In my instance, we built our application around Ruby on Rails. Everyone that is coming along on it also has to figure it out and learn it. We build docs around it. That’s my job. I’m in it, and that’s her application. Now, in the future, somebody might ask why we didn’t do it in Middleman or Jekyll and just build on top of it. And you can show proof that it’s going to save X dollars and your time and it’s going to be more user-friendly. Then make that recommendation and lead, and pitch it to your employer. But ultimately, it’s got to sell itself and the boss has to say “Yes, I get it. So let’s do it.”
Reuven: Yes, I remember very well. When I was in college, we were brainwashed into thinking that LISP was the best programming language ever, which by the way it is.
Arsalan: It’s great.
Reuven: Oh, it is, and then you get out into the real world and realize there aren’t that many jobs for LISP programmers. Nowadays you could argue that there are some for Clojure, but back then, forget it. So, there I was at my first job at HP and I started suggesting that we use this technology or that technology and I can only imagine myself now in my manager’s shoes because he was like “yes, that’s very nice, but no. We have invested a lot of money into people using C++. We will be using C++.”
Reuven: That was very frustrating for me because I was really interested in using other languages. At the time I had started using Perl quite a bit. This was back in 1992. So, I worked on my Perl on nights and weekends. Then an opportunity at work came up where we needed a staff directory. They distributed the staff directory to everyone in text format and I decided that I would make it available to everyone via a command line program that they could just run and parse through it. I wrote it and put it in Perl and people were really happy. So did I influence the product or the overall group or the direction of the entire company? Not on your life, but I did find a way of learning things myself, advancing my knowledge, and solving real-world problems.
Arsalan: so, here’s the problem. When I’m a new developer, I’m new and I’m not so confident. I don’t know what language to pick. I don’t know what I should be doing with myself. That’s the problem for a new developer. So, you guys have done different things. Based on your experience, do you think that Python is a good language for new people?
Reuven: I have been telling people for years that if you’re an adult and you want to learn programming learn Python and then learn other languages. Part of the reason for the language’s popularity is because it is consistent. They are big on those surprises. The syntax is not surprising. What you see is what you get. Part of the reason why it’s so much fun to program in Ruby is because the language has so much magic in it, especially if you’re using something like Rails. So, you can try something and it’s like “wow that worked exactly like I would have expected.” But, it works how you would expect it after you’ve worked with it for a while.
Reuven: Python is almost like executable pseudocode and yet it handles a lot of the paradigms that you want. It’s object oriented and it has functional stuff in there, and it has a huge community and tons of resources. So, I think that Python is a great language to start programming it. That said, I was sort of disappointed when I found that MIT, the place where I went to school, changed away from LISP to teach Python as the first language. The thing is, if you’re teaching and a university environment, you want to get people thinking in certain ways. There are certain kinds of thought that Python doesn’t express as well as LISP would.
Arsalan: Are you saying their primary language as a course or class that they use Python for that?
Reuven: It’s now used by about 80% of American universities. That’s the most recent number that I’ve seen as the intro programming course. So I’m typically working with people who generally program in C, C++, C sharp, and Java. They are like “what is this toy language and why am I being forced to learn it?” So, I tried to explain to them that it’s not a toy language even though it looks like it. Secondly, it’s not going away. So, you can now and will in the future be able to get great jobs using Python.
Arsalan: Yes, I found Ruby to be a very mind bending, twisty kind of language. The more in-depth I try to learn it and the more I try to understand how Ruby is built behind the scenes, I would pick up a book and read a couple of pages and then sit back and let it settle in. It’s never been like this and other programming languages for me. It has always been fun, but Ruby has been pretty intense. Now, a lot of people who work in Ruby on Rails don’t get to that complexity because they are doing the simple Rails on API. Rails makes Ruby look easy, but Ruby is pretty complicated deep down, and you can get it wrong.
Arsalan: So, let’s get back to Python. I don’t know very much about the Python ecosystem. Give us a little bit of an overview of where you can find a job in Python and what types of things you can do with Python. I know that you can do pretty much everything with Python, but what is it known for?
Reuven: My background is doing web development. So, I was convinced that everyone that comes to my training programs in Python would be web developers or aspiring web developers because that’s what I do and clearly that’s what everyone else does. There’s certainly plenty of frameworks, the most popular being Django and Flask are doing web development and Python.
Reuven: But, it turns out, that a small minority of the people who come to my training are actually using Python for web development. A huge number of them are doing it for test automation. So, these big companies like Cisco and Apple and HP who hired me to come in and do training, the people who are coming to the training aren’t software developers, but are doing testing. There setting up to ensure that they can automatically test all the new stuff that their company is doing. Another group of people that is growing in number is data scientists. Python is probably the number one or number two language behind R. It’s almost like a fight or a death match between R and Python for which language will be more popular among data scientists. So if you do analysis, machine learning, or all of that other stuff, Python has a huge amount of stuff going on.
Reuven: There’s also a fourth area to some degree, which is system administrators who want to level up from doing UNIX shell script and do things that are more sophisticated or lean on libraries that do more for them. Or, they want their code to be organized in some coherent way. So all those kinds are very popular for Python and then there are all these weird little niches that I’m totally unfamiliar with. Just a few days ago, someone emailed me and said that they were using Python for Blender, the 3-D visualization system uses Python as a plug-in language. Who knew?
Arsalan: What do you think, David?
David M: I have to get going here, but I’d be happy to answer any final question.
Arsalan: Do you have any final thoughts on this topic?
David M: I can’t say that I been in the industry as long as Reuven, in terms of training and the specific language. I have attended some Python training classes here in Portland to the Portland Code Guild, which is what they specialize in. I really didn’t gravitate to it, to be honest with you. I don’t know if it was the community of the language. I gravitated more towards Ruby, mostly because most of my friends and family who have encouraged me to stay in software and keep building on it are in Ruby. Mexicanos are mostly loyal to each other and aren’t going to switch from Coke to Pepsi or that kind of thing.
David M: I have been very fortunate to get scholarships to RailsConf, Tuskegee Ruby, Ruby on Rails, and a number of different ones around the Ruby community. I think that I just gravitate to it more, but I agree a little bit with what Reuven is saying about how once you’ve mastered one, jump to another one and then I think it becomes easier. I started with Ruby on Rails. Once I mastered that, I zeroed in on how I could improve it. When I found out that you could improve your speed by using a static site generator page to do the exact same thing, then you could use Jekyll or Middleman or something else. Then, it becomes easier to do that because you’re already familiar with the basics. So, you get the technical mastery.
David M: You have to start somewhere. By siding with the one that gives you the path of least resistance for your learning and the one that is easiest for you to pick up, that’s the one you pick up, and that’s the one you run with. From there you can always jump to others.
Arsalan: Nice. I know that you have to go, but thanks for your input and will continue this discussion.
David M: Absolutely. Reuven cheers from Portland.
Reuven: What a pleasure talking with you again, Dave.
David M: Thank you, Sir. We’ll be in touch.
Arsalan: All right, Reuven. Now, it’s just you and me.
Reuven: So, now I can just win the argument by Fiat. That’s fantastic.
Arsalan: I think that there are lots of programming languages. Some people like Python. Some people like Ruby. Some people like Java because a lot of colleges back in the day used to teach Java as their first programming language. It could be C/C++. Actually, it could be any programming language. You’re not going to learn a programming language that will hurt your programming gene or your programming ability. It all adds up.
Reuven: I think that there’s an advantage if your first language is a dynamic one rather than a statically compiled one. It’s almost like “why are you learning to program?” If the point of programming is to just turn out big programs that you can then use at work, that may well be a better choice to do a statically compiled language.
Reuven: But, if your goal is to understand how to program language works and think like a programmer, then I think a dynamic language allows you to flow faster. It allows you to avoid much of the overhead that’s associated with the statically compiled language. It also allows you to focus in on what it means to program, what it means to develop code, what it means to worry about variable skill and functions, and what it means to program in object style versus function style. I think that’s easier and that sort of language.
Reuven: I totally agree with you when you mentioned that you then want to learn other languages. It’s not what should be your only language, but what should be your first language.
Arsalan: Yes, a programmer’s life is more like a journey. You always have to start somewhere and you don’t know where you need to go because you don’t know what you’re getting into. So, once you start working in a programming language, and in a programming environment, it includes your tools, your development environment, and perhaps your operating system. You’ll figure out what to work with and what works better for you.
Arsalan: It’s not just a personal thing, either. Perhaps you like to work with a Mac, but maybe you have this great job that uses .NET and you have to use Windows and learn to like it. You may carry over some of the things that you learn from another programming environment and programming language. Over time, you may see features migrating over from one programming language to another. So, it’s not clear where you need to be in the next 5 to 10 years. So whatever you can start with, you should just go ahead and do it.
Arsalan: I want to introduce David Gatti, who just joined us. It was great to learn about the Python ecosystem. I’ve been in the industry for a long time, but my impression with Python was that it was this very niche language that is very useful for a certain segment of the population. I didn’t know that it was widely popular. A lot of the tools and software that we use are plug-in systems or their extensibility mechanisms use Python. I think sublime text also uses Python.
Reuven: Yes, you’re right. I forgot about that.
Arsalan: So, that’s incredible. I never really put all this together and made this mental model of this amazing global programming language. Do you get this impression that its popularity and usage is growing a lot?
Reuven: It is hard to exaggerate the popularity growth that I’ve seen over the last few years. I see this as someone who does training. Companies are interested in teaching their programmer so that the companies will be more effective and efficient. Five or six years ago I was doing a Python class every month, two months, or three months. Now, I am solidly booked for 4 to 6 months in advance.
Reuven: If I could clone myself two or three times, I would still probably be able to fill up and it’s not just because I do a lot of training and in good at it, it’s because there’s insane demand. Individuals and companies are growing and adopting Python. Many companies are dumping proprietary language in favor of Python. It’s funny because I got into the whole training thing because I wanted to get off of Ruby training, and the demand just wasn’t there, at least in Israel.
David G: Can I ask one question?
Arsalan: Hi, David.
David G: Hey, hello guys. I wanted to know if you knew why people choose Python over other languages.
Reuven: Interesting question. I’d say that I have some good guesses and part of it is increasing returns. More generates more. So I think that a lot of people end up using it because their friends are using it. You see that with a lot of students as well.
David G: So, it’s evolved because of word-of-mouth?
Reuven: Yes, but you also have all these universities were students are learning Python as their first language. When they graduate, some of them decide they want to start a company or do some consulting and use their knowledge of the language that they’ve already learned.
David G: So, why do schools choose Python? Is it because that’s what they started with and they’re sticking with it? Or is it because it’s better in some things? Is it easy to learn or what’s the deal with it?
Reuven: I think a lot of the theory is that they wanted something that was easy to learn. They wanted something that the students could pick up quickly and then focus on the ideas of computer science and the ideas of computer programming, not the language specific issues that you would get with another language.
Thanks for Listening!
If you found this episode useful, please go ahead and share it with your friends and family. You can also listen directly and give your feedback on the website.