Skill Level Intermediate
- Hey there, this is Ray Villalobos and this week we're talking to Kevin Skoglund, professional developer and founder of Nova Fabrica, a web development agency that builds scalable solutions on Ruby, PHP, SQL and other technologies. Kevin's also a fellow staff author with 24 courses in the library, so thank you very much for taking the time to be here today Kevin. - Thank you Ray. It's a pleasure to be here. - Kevin, one of the most common questions that I get from people who watch our courses is how do I figure out what I should be studying.
There is so much out there that, I think, it's a little bit overwhelming sometimes, so what would you suggest to somebody with that question? - Programming is such a fundamental concept to so many things now. There's the internet, smartphones and then you're starting to see programming embedded into smart devices like thermostats and light bulbs. So it really depends on what you want to program for. You should start out by thinking about where you'd like to end up. Are you interested in building websites or phone apps or do you want to develop new hardware, new devices or work with some of the new technology like robots and drones and 3D printers.
Those are the core components that all web developers use, regardless of what kind of backend technology you might decide to use. - So really be good at those and then explore some of the other ones. But what about people that are trying to decide; maybe they know enough of the three core languages. How do they make a decision between something like Ruby or PHP or Node.js? - It depends on your particular case, but I often recommend that people start with PHP, even if you don't intend to be a PHP developer in the long term, because PHP helps you understand a lot of the basic concepts like working with a web server or the request-response cycle, sending and receiving parameters, working with cookies, that kind of stuff.
Whereas frameworks like Ruby on Rails, which I love and I highly recommend them, they handle a lot of that work for you behind the scenes and that's useful, that's why they're useful tools and why we like them, is because they do a lot of that lifting for us, but it hides a lot of it whereas you work with something like PHP, you're more exposed to those things and you have to work with them yourself. - Yeah, and PHP's definitely come a long way from years ago. What version is it in right now? - Version 7. - Version 7, so wow, it's definitely grown quite a bit and it's a lot different if you haven't been in PHP for a while.
Those are techniques that have become common and clients and users want them. For example, infinite scrolling, where content appears as you continue to just scroll down the page, those have become common features of something like Facebook or Twitter, so everyone expects them in all the web applications they use. - That's great, yeah. Definitely the DOM is very foundational. AJAX, those kind of features are really really good for anybody to have. I know you had done some interviewing. This is sort of controversial; sometimes people get coding questions in interviews that are maybe a little difficult to process.
I just heard of one of the makers of the Bootstrap framework took the test for being an intern at Dropbox and he actually could not pass that test, even though he had come up with all these different projects. So what are your feelings toward coding questions during interviews? - I hate them. (laughing) I think it's a form of hazing that programmers do to other programmers. I think it's terrible. I think it reveals very little about whether you actually know how to code, whether you'll be a good employee.
And being able to write a complex algorithm from memory is just not useful. Whenever I need to do it, I look it up. Earlier this year, I don't know if you know, but there was a great big meme on Twitter, where a bunch of the top programmers started tweeting out confessions about simple code that they would have to look up if they were asked it in a coding interview. And the point being that even if you've been working at a place like Microsoft for 30 years you still have to look up answers to some of these questions. I look up things all the time. I look at documentation all the time. - Exactly.
I think that I appear to be a lot more intelligent than I am, just because we get edited when we write the courses and we have the capability of looking everything up just like somebody would, so that's really intimidating, I think, to people that are just coming in. So if you don't like those kind of questions, what kind of things do you want to know from somebody who's applying for a job as a developer? - I want to know almost more about their character and their passion of the job and their work ethic than I do even about their coding skills.
My company's always been a small team, so I want to find people to work with that I like, people that I genuinely like working with. I like it when they have different strengths and weaknesses from myself and the other team members. I like to ask getting to know you kinds of questions in an interview to find out more about the person, find out where they grew up, how did they get to this point in their life, what about this job appeals to them and why are they passionate about this job. If a career is just a paycheck then they're not going to take as much pride in their work, they're not going to seek out growth opportunities, they're less likely to stick through tough challenges.
I really want someone who has a good work ethic. That's super important. Someone who can work independently, but also can recognize when they're stuck and they're just spinning their wheels and they can ask me for help then. A lot of being able to trust someone with a task is being able to know that they'll come to you if they need it and if you haven't heard anything from them it doesn't mean that nothing's happening, it means that everything is A-OK and they'll sound the alarm if something goes wrong. - But how do you get to that point where you're comfortable that they have enough knowledge to even come to work at the company? There's got to be something that you look at to ascertain whether that person has the minimum qualifications for the job.
- Yeah. Instead of asking coding questions, I like to ask them to show me some of their code, especially say, "Show me some code that you're proud of "and then let's talk about it. "Let's talk about why you like that code, "what you're proud of about it, "what were the problems that you were facing, "how did you solve them?" Those, to me, tell me a lot more about someone's skills, actually having a conversation about a piece of code instead of trying to put them on the spot and have it feel like a gotcha question where they feel like if they screw up the whole interview is on the line.
It's more of a conversation. - Perhaps feeling like they're memorizing some answers just to make sure that they check off the things they're "supposed" to know. I'm a career switcher and 90% of developers consider themselves self taught, so do you have formal education and development and how important do you think that is for someone applying for a job today? - I'm totally self taught. I learned from reading, from talking to other programmers and especially by just doing.
Just by diving in and making mistakes and learning from those mistakes. So I'm proof that you can be self taught and have a career in this. If you're hoping to do advanced computer development at a top company or in a research lab, then you probably need a CS degree. But as I mentioned, programming is everywhere now, so there's lots of opportunities in lots of places, so you don't necessarily have to understand the intricacies of memory allocation or what NP-complete means in order to be able to do this.
It really just depends on what your interest is and then just diving in and doing it. - One of the things that I do appreciate from having gotten some sort of degree is just the ability to communicate and some of the things you're talking about, if you meet somebody that has done really well in school and you know that they're a responsible person and they can write, they've been able to pass certain standards, so I do like that about it. Since you are self professed, complete self learner, what kind of things do you do to make sure that you stay current and is there any sort of online resources that you think are important for people to know about.
- I don't have a lot of regular reading resources. I do know other developers who read things like Hacker News and Slashdot. I follow a few key developers on Twitter who I find interesting and I sometimes get news from there, but mostly my learning is driven by me and what I'm curious about or what problems I'm facing or what I'm trying to achieve in a particular project. So the goal comes first and then I seek out the materials and all the education I need to get me there.
- That's actually a really great point, because that's exactly how I learn things. I make myself do something that I don't know how to do, just to make sure that I get the experience, because I think it's so critical to learn from having done something, because you run into things that aren't the same as something you get from just reading a book, so that's great. - It drives you too. It makes you very purpose driven, because I'm trying to either solve a problem and arrive at that solution so I can do what I want to do, or I'm driven by my curiosity.
So that kind of drives me through that educational process instead of sitting back and trying to just get ahead for the sake of getting ahead. - I always tell people don't just watch the videos that I create. Actually try to do and expand on the things that I'm discussing, because you're going to learn so much more from following along and practicing some things. If you met somebody that was applying for a job, what kind of advice would you give them that maybe they haven't heard before? - I don't know that I have any sage advice that's unique.
I would tell them to do what they feel passionate about and then use it as an opportunity to learn once you get there. I think often that's overlooked, is what an opportunity for growth a full time programming or developing job can be, because if you're an amateur who just kind of dabbles in it then you spend four or five hours a week working on it, but if you're doing it full time you're investing 40 hours in it. That's a whole week of honing your skills and getting paid to do it, being able to pay the rent while you learn.
I think you get better a lot faster if you can get a paycheck to do what you want to do instead of just trying to do it on the side. - That's a good point. Try to get some clients. Try to get some real world experience. I think also that a lot of the jobs that people get come from connections they have in the industry, so that ability of people to just meet other people, meet other developers. Volunteer on projects if you can. And you'll learn so much more from that, from doing something.
And also that will bring other opportunities for employment in different places. One of the most popular courses in the library, as I saw your new list of courses, was on security and that is definitely a huge topic. What do you recommend for people who are just getting started to understand about security? - I'd say that there's three parts to that. One is if you want to do security as a career, that's a huge thing on it's own.
It's a big topic and is a diverse field, so you could be doing server security or network security or being part of a security team that makes sure that other people are following the rules or a team that's doing penetration testing to break through security to find weaknesses. So that's a whole big field on it's own and there's lots of different areas. And then there's also web security. If you want to be a web developer, really learning the ins and outs of web security. And that's become super important.
All websites now have to have that as a consideration. It's just kind of assumed. And then the third one is just everybody else. I think there's a role for people who are not technical to learn about security and to learn some of the common principles and stuff like how to have good, strong passwords, watching out for common techniques that hackers use. I think that can be useful to even the non-developer people. - That's definitely one place where I think PHP has come a long way.
And I think every version just tightens down security more and more. But understanding those things like what do people try to do to get into the system and what kind of things can you do to take them out of that opportunity, if you can. One of the ways that I found you in the library was by one of my favorite courses and it's your second most popular course. It's called Get Essential Training. That thing is so deep that it's pretty awesome. How important do you think it is for young developers and applicants to understand version control and maybe specifically getting GitHub? Do you look for that as you're interviewing people? I think it's absolutely essential for all developers to learn Git.
I wouldn't say I would never hire someone who didn't know Git, but it would definitely give me pause. Candidates who know Git are always going to have a leg up. It can be used with any code, even if you're just writing HTML and CSS. It's sort of just essential now. It's become an essential tool. - That's probably also a way to look at what they have done as well, like if they have some code up on GitHub, you can very easily check out the things that they had done and it makes the interview probably a little bit easier. - Yeah, definitely.
Git really helps with so much of what we do as developers, because it keeps track of your changes and the changes you make over time, so that you can have a record of them, have them well labeled, well organized, but also gives you a chance to second guess them before you actually commit them so you have a chance to review your code. And then it also helps you to collaborate with others to go back and merge in changes. Branching is a key part, because it also allows you to experiment, so you can branch your code.
Try something, if it fails you just throw it away. Your original code is still the same, but if the experiment works out then you can just merge it in and advance your project along with that new feature. - I think it's a really good differentiator. If somebody takes the time to learn something like Git and GitHub they probably have the kind of brain that wants to do well on a project and collaborate with others. It just has a leg up on somebody who maybe just knows the basics. That's really super great. That's all that I have for you.
Thanks a lot for your time and I'm going to add some links to your contact info. And as I normally say, if you have a question that you've been asked or have asked somebody at a job interview and you'd like to share it, you can get ahold of me at LinkedIn or through almost any social media network @planetoftheweb. Thanks a lot Kevin. - Thank you.
Q: Why can't I earn a Certificate of Completion for this course?
A: We publish a new tutorial or tutorials for this course on a regular basis. We are unable to offer a Certificate of Completion because it is an ever-evolving course that is not designed to be completed. Check back often for new movies.