Jonathan Kupcho: Chingu Guest AMA No. 3
@belcurv: How important was your education in getting your first dev job? Do you think it opened doors that, for example, a solid portfolio alone would not have opened?
Jonathan Kupcho: CS degree helped later in my career rather than when I first started. I ended up learning a lot of Math, and Algorithm type stuff while studying CS, along with C++ and some really low level stuff like assembly, etc. My first job out of college was Java, so I had to basically learn everything from scratch. So, in my opinion, the biggest gain I had right away from college, was the ability to quickly learn things. And probably the most important thing I’ve learned in my life. Later in my career, the algorithms stuff ended up being slightly helpful, but it was only when I was engineering applications on my own, etc.
@laurendoughty: Would you recommend one [Java or Python] over the other?
Jonathan Kupcho: I mean, I help run a Java meetup. So obviously, Python … ;) Honestly though, they’re both good. If you’re going for JS, I’d say python due to it being slightly more functional. If you’re into the backend, Java is the way to go.
@agathalynn: In your bio it says that you do test automation… is that the same sort of testing (in general) that we might do with Mocha or Jasmine?
Jonathan Kupcho: I write mostly JUnit at work for Java, lately I’ve been writing a lot of React code, using Jest as the framework for testing. They’ve updated it a lot, and it’s quite awesome.
Jonathan Kupcho: Here’s what I’ve always done when trying to learn something: Pick something you enjoy. Soooo for me, at one point it was EVE Online. I wanted to learn Spring really well, so I wrote some backend code with a REST API that consumed the publicly available API from the game devs. If you pick something you enjoy, you’ll stay interested in it, and not get bored. Plus you’ll learn something at the same time, win win. To answer your question more directly, go through the Angular tutorials to start. IMO, Angular is one of the hardest component based frameworks to learn at the moment. VueJS and React are much more intuitive to me. For resources, always google “awesome <framework>”. So for angular, google “awesome angular”. There’s usually an associated github: https://github.com/AngularClass/awesome-angular. The parent repo is here: https://github.com/sindresorhus/awesome.
@jboxman: What’s a typical day like like for you at work Jonathan?
Jonathan Kupcho: Usually get in around 8–8:30, grab some coffee, check e-mail, toss headphones on and get coding. Lately it’s been a lot of devops stuff. I try to keep meetings to a minimum, but working for a large corporation they’re inevitable.
@jboxman: Since it’s on my mind, did you negotiate before accepting your current position?
Jonathan Kupcho: Always negotiate, it’s in your best interest. And you’re not going to offend anyone unless you are unrealistic.
@dcr7076: When going for jobs, what did you present to prove that you knew what was needed to do the job?
Jonathan Kupcho: The stupid answer is, sometimes you don’t. No one knows everything, and if they do, they’re really good at faking it. Best thing I’ve learned through the years is bounce ideas off each other, and be willing to accept you’re wrong. Cause you will be. Which is really hard in an engineering field cause most people are so used to being right all the time.
@belcurv: I assume your current devops workload comes with your role as senior programmer analyst. Does this mean you’re managing a team? If ‘yes’, what in your experience makes (or breaks) an effective team environment?
Jonathan Kupcho: The simple answer to the ‘yes’ portion is communication — communication in IT is awful. Get a bunch of introverts who just want to code the next hot video game, and have settled for corporate development … recipe for disaster. Keeping the team meetings light and informative is the best to building cohesion. If you can’t joke with your peers, you’ve lost them.
@jboxman: What’s your favorite beer?
Jonathan Kupcho: Ah…favorite beer, being from Milwaukee, I feel like this is a trick question. Gonna cop out and say i don’t have a “favorite”. My favorite casual (read: drinkable in social settings) is probably something called Spotted Cow which is a Wisconsin only thing. Love how I capitalized Spotted Cow, but not Wisconsin — priorities right there, people.
@chance: Jonathan, working at a larger company, do you see a lot of junior devs come in? If so, is there a common trap they fall in or mistake you see them make?
Jonathan Kupcho: Most don’t ask enough questions / are afraid of screwing up. No one is expecting you to be a rockstar when you join and you literally have nothing to prove. So just relax, and enjoy being part of a new team. Ask questions, make mistakes, that’s how you’ll learn. If they hold it against you…find a new job ;) As long as you seem like you’re interested in learning new stuff, that’s 90% of the battle.
@jboxman: Is there any kind of training or a mentorship program where you work? Or Like code reviews where more senior developers offer feedback on how to be more awesome?
Jonathan Kupcho: [Re: training/mentorship] Nothing official. [Re: code reviews] Code reviews are actually legally required for publically traded companies — SOX compliance requires someone else looks at your code. Little fun reading when you’re bored: https://en.wikipedia.org/wiki/Sarbanes%E2%80%93Oxley_Act (this is US only, not sure for the EU folk if you’re in here) It’s to provide transparency to investors. And make it auditable, etc. All that fun legal stuff. Welcome to corporate, enjoy your stay!
@caravdv: How frequent are code reviews?
Jonathan Kupcho: Frequency depends on the team, usually every 2 or so weeks.
@jboxman: What’s the most rewarding/challenging project you’ve been involved in?
Jonathan Kupcho: Hrmmmm. Probably a small UI I wrote for the business. We actually involved the business in every step of the process, bounced ideas off each other, made sure the UX was really well thought out. Created something they not only enjoyed, but actually looked good.
@dcr7076: Do you have any professional certs..Do you recommend this for new developers?
Jonathan Kupcho: I do not. Not really sure any of the developer ones are worth it, unless you wanted to be a Microsoft MVP, or Oracle person. Development moves so fast, certs die off as quickly as they’re made.
@belcurv: “development moves so fast …” How do you deal with all the new things popping up? (ex. libraries, frameworks, etc.)
Jonathan Kupcho: Kind of hits back on the first question. Learning how to learn is the most important tool you can have. Always be learning. Always. When you learn something really well, the new stuff should come pretty naturally. They normally fall into a few different buckets, like ‘convention over configuration’ (think rails). Libraries usually just make your life easier, simplest one I can think of would be something like lodash, which is just a toolbelt for everything JS related. So my advice: pick a technology stack, learn it well, all the new stuff will come naturally.
Another thing: do something outside your comfort zone. For me it was giving talks at meetups. Teaching what I know has given me more insight into what I already know, strangely enough. Cause you end up needing to explain it in a way that’s understandable.
@najd: There is a need for automation at my spot, so that is why I considered start learning java. Mobile as well…
@colegottdank: Jonathan, I have been coding in Java for about 4 years now and it is the largest part of my software engineering major. I graduate in 2 years and am wondering how the job market is? How was it for you to land your job?
Jonathan Kupcho: Java is very hot right now, and you have pivotal and Spring Boot to thank for it. And netflix. And AWS. The thing with Java dev — it’s not “sexy”. Generally you’ll be writing applications that’ll never be seen by the general public. And when you first start, you’ll be maintaining (probably) legacy applications. That said, it’s a very exciting field to be in right now. Spring Boot is an amazing framework — if you haven’t had a chance to look at it, go do it.
@colegottdank: Also Jonathan, can you give me an idea of the interview process for Java developers? What type of questions were you asked?
Jonathan Kupcho: With Java, in my opinion, the soft skills are probably the most important due to how easy Java is to learn. Make sure you know how to be part of a team, and you’ll be good to go.
@jboxman: Random question: What music do you listen to when coding? I do EDM usually
@laurendoughty: how did you find the environment you’re most productive in? music/no music etc
Jonathan Kupcho: I get distracted incredibly easily. So I know I need something like EDM with a driving beat to keep me focused. As to how i found it… dunno!
@colegottdank: Jonathan, how often are design patterns used in real world software?
Jonathan Kupcho: Knowingly? Rarely. Eventually you just kind of start doing them cause they just make sense.
@colegottdank: Are there some you can name?
Jonathan Kupcho: Like delegate pattern comes in really handy. Factories come in handy. Builder pattern is really helpful for junit. I’ve found i tend to code, then realize i’m using patterns i didn’t know had a name.
@jboxman: Do you have any blogs or podcasts you follow?
Jonathan Kupcho: None work related. Filmsack is a great podcast for clearing your head. I listen to a lot of This American Life, You Are Not So Smart. But I’m a bleeding heart so it’s between that and NPR.
@colegottdank: Any older languages you would recommend learning for someone who is mainly a Java developer?
Jonathan Kupcho: Learn a scripting language. Python. Here’s a piece of sage advice: learn how to use a terminal editor (i.e. vim). It comes in incredibly handy. ssh-ing into boxes and actually being able to edit things. VIM Adventures — Learn VIM while playing a game https://vim-adventures.com/ Also, learn some basic stuff about infrastructure. If you can explain how pub /private keys work to someone, you’re already ahead.
Jonathan Kupcho: question.call(this, ‘jonathan’)
Like I was saying before, once you learn one [language] well, other languages become easier to learn. The “this” keyword is a toughy, I’ll give you that one. If you start doing stuff like: var self = this someFunc() Learn bind and call a bit better. var self = this; is a bit of a code smell, antipattern, whatever you want to call it.
@caravdv: A code smell?
Jonathan Kupcho: Code smells are just pieces of code that probably aren’t best practice.
@c-lion: I think that was my real question, if it made more sense to focus on one language alone up to a certain point & then add the other. I can’t honestly say I spent enough time on C or C++ to qualify as “learned well” either.
Jonathan Kupcho: Right — if you’re more comfortable diving in and learning something completely go for it. I know for me, though, since I lose interest so easily, I need to find something I’m interested in.
@c-lion: A lot of entry level web dev jobs try to get 2 for 1, (AKA unicorns).
Jonathan Kupcho: Another fun term is “full stack”. Which is just a fancy way of saying, I can do both frontend and back.
@caravdv: Would you avoid jobs that are looking for “full stack” junior developers?
Jonathan Kupcho: Probably =P
As an entry level, it’s impossible to be full stack. There’s too much to know. Especially on the security side.
@aamirgit: So would you recommend I stop trying to learn mysql and php for the moment while I solidify my JS, jQuery and get a good chunk of React JS knowledge?
Jonathan Kupcho: Not at all, if you’ve started learning something, learn it to completion. Context switching will just lead to headache.
@c-lion: How do you know if you have learned something to completion?
Jonathan Kupcho: Generally I’m following some sort of an “intro to xyz”. If it’s peaked my interest I’m looking into advanced tutorials, etc. Then move into applying it to a problem. If you’ve moved into applying it, I’d say that’s my “completion” mark.
@jboxman: Ever get seduced by the new hotness and start applying that pattern everywhere?
Jonathan Kupcho: All the time. It’s impossible not to. Why you think we wrote something in VueJS haha. Again, this is all my opinion, and for me, if something isn’t holding my interest, I’m not going to learn it. Some people can learn from reading books — that’s rarely helpful for me. I need to actually apply it. College is the one exception.
@aamirgit: Sorry for asking so many Qs but is a conversion course masters into comp sci a good idea if you want to go into web dev or even software engineering? Coming from a background in econ.
Jonathan Kupcho: This is a huge opinion answer — just prefacing. Masters isn’t worth it for a job in development. Again, my opinion: masters courses usually involve LOTS of theory — something you’ll rarely apply to your job. And I wouldn’t recommend getting a masters unless you get a PhD and teach.
@c-lion: Well perhaps this is an easier way to look at @aamirgit’s q: for anyone with only a liberal arts degree, would a bootcamp or program like FCC be enough to get hired at your company for a front end or back end position?
Jonathan Kupcho: It really depends on where you’re applying, honestly. Smaller shops, probably. Larger corporations generally want a degree to get a foot in the door. Or experience. I’m not saying either is right or wrong. Usually if someone new is on the team, if they can learn and are willing to listen and make mistakes, I’m good.
@c-lion: But only a degree in CS would count?
Jonathan Kupcho: Wouldn’t say that. Math, computer engineering, electrical engineering — anything logic-based can become a programmer IMO.
@belcurv: Take @c-lion’s hypothetical applicant … they’re coming with a portfolio of front-end and back-end projects … do they limit their scope to junior positions? or fire off applications to mid-levels as well b/c why not? Maybe more succinctly, how do you separate juniors from mids?
Jonathan Kupcho: The interview. Tech screens can fish out who knows what they’re talking about vs. who doesn’t.
@jboxman: Do you have penguins in WI?
Jonathan Kupcho: No. No moose either!