DEV Community

Cover image for Always a beginner: Jumping from one programming language to another
Mina Oh
Mina Oh

Posted on

Always a beginner: Jumping from one programming language to another

A lot of people say that to succeed in the business, especially in the Tech world, you must focus on one thing, and be damn good at it.

But how do we know which language to choose from? Have you ever felt so lost and so confused?

I'm willing to bet that at some point in our lives, we all have.

I handled my confusion differently -- I tried to learn as many as I could in my youth without nothing much to show for it.

A lot of us didn't know where to begin... so we depended on education. As did I.

High School: Java, C++

High school gif
My batchmates and I were fortunate enough to be one of the first students who had programming in high school. There, we learned the very basics of Java and C++.

For one semester each, we were introduced to this bizarre world of syntax, code compilation and execution -- and a lot of printing! We covered until arrays. As if loops weren't hard enough!

College Education: Java, C, C++, COBOL, HTML, CSS, JavaScript etc.

College gif
Then, when I went to college and chose the wrong course in school #1, I took a programming class for two semesters: Java. We actually made a game in the end. We covered advanced topics: graphics, sockets, threading etc.

When I shifted to Computer Science and went to school #2, we were bombarded with programming languages -- the very foundation of them. I learned:

  1. C - The first programming language taught to freshmen. I absolutely hated it. I never really liked procedural programming. And, oh, pointers! Ugh!
  2. C++ - I liked this one, even joined a programming contest at school and won second place, I think. Finally, some object-oriented programming, I thought.
  3. Assembly - Low-level programming. I struggled printing my own name.
  4. HTML, CSS, JS - Just the basics. Nothing fancy. At one point, we were asked to replicate the google balls animation and replace that with our name. That activity was pointless. We just changed the coordinates.
  5. COBOL - All I can remember is 8 spaces! And we had to write it. On a yellow pad paper.
  6. Mobile Development - Nokia - Oh, don't even get me started on this.
  7. Groovy - This was like Java and proved to be helpful while learning python. It could take some getting used to, especially when you come from Java and C++ programming languages.
  8. Java - I joined programming competitions in and out of school. Never won outside of school, though. Haha.

College Side-hustle: Python, Swift, JavaScript

get shit done gif
Thinking that what school had to offer was completely inadequate for the "real world", I studied online.

I started off taking free online classes on Coursera. Back when it wasn't so popular, most of the classes were actually for free. I studied Algorithms 2, NLP (for our Thesis), Python etc.

Then, I bought a course on Udemy: Programming in iOS Swift 6. In the years to come, I bought 2 more courses--iOS Swift 7 and 8--and never got around finishing it. What a waste!

I also started studying more front-end, web development languages like CSS and JavaScript on Code Academy.

Internship: Java, Java EE, Spring, Hibernate

internship gif
I interned at Company X and was immersed in a world full of highly skilled Java developers, masters of their craft.

I was exposed to design patterns, frameworks, MVC, and Java Enterprise Edition (J2EE) programming.

It was amazing. For the first time ever, I actually felt like I was a part of something bigger. I was being productive.

We developed a full-blown web application on our own. It was one of the best experiences ever!

After college, Job #1

job 1 gif
In Job #1, I was exposed to mostly C# .NET, Visual C++, and C. My programming exposure was predominantly for C#. It was easy to learn because my forte was Java.

I still had side hustles as well: I continued with iOS, dabbled with Machine Learning etc.

Just like before, however, I have never, not once finished a course on Coursera completely. Something always comes up that makes me miss a programming/assignment deadline -- outing, OT, family, other real-world problems etc.

I had some freelance projects as well, all of which were programmed in Java.

Job #2 (Present)

sheldon swag
Now, I'm a C# .NET Developer. Yup, from Java to C#, indeed.

I still do some freelance projects, still in Java. Why? Because most projects are desktop apps. And I'm using a Mac.

I remain consistent in my drive for learning and continue to subscribe to free MOOCs. But I still can't finish them.

On top of that, I also learned the basics of React Native. I joined a couple of hackathons and developed prototypes with my team for iOS and Android. That has been one of my ultimate goals -- to publish an app on the App store.

The Ultimate Dilemma

idk
I have learned a lot of programming languages in the past and have covered most, if not all, of the basics. Not much has come from it. And how could it? I only scratched the surface.

I mean, you can't create an app -- any app, web, desktop, mobile -- if all you know are arrays, printing, loops, and basic UI. No, you have to learn the integration, study the libraries, the API, learn new components, build... so much to learn, so little time.

"Jack of all trades, master of... [a few]"

how

I still want to finally publish an app on the App store/Play Store.

Also, I want to legit improve my C# skills because I love my job.

I want to finish my MBA with flying colors and become a future founder or co-founder in the near future.

I also want to eventually become a renown blogger and publish a book someday.

I want to do so much with my life.
But how? How can I become all those things and, at the same time, start learning and mastering a new language?

To the programming beginners (self-study)

You're lucky. You're choosing the programming language you want to study based on your goals and interests.

To the CS / IT students

Stick to one programming language -- fall in love with it and master it. You will be a subject matter expert in no time.

I have known a handful of people who made it when they focused on one language. They became experts in the field and are now well-traveled Tech speakers.

To the people who have made it

How did you come to choose the language that which you now are an expert? Any advice for a puzzled, goal-oriented, and passionate developer?

Top comments (13)

Collapse
 
ssimontis profile image
Scott Simontis

Work for a consultancy for a few years...that's where I learned the broadest set of skills throughout my career. If you can find the right start up, you can gain exposure to some really unique experiences as well. My first job was doing Windows embedded work in C# and it was a blast.

Also, concepts > languages. I remember trying to learn functional programming two years ago and it was a total waste of time. I wrote all the code in tutorials and books, doing so multiple times and it never stuck with me. A few weeks ago I found myself applying some of those concepts without even having to think about it! The more ideas you can expose yourself to and the more perspectives you can learn to appreciate, the more you will be able to adapt as a developer.

Collapse
 
laurieontech profile image
Laurie

A consultancy is a wonderful way to learn a variety of skills surrounding the full lifecycle of software development. However, I think it will likely only further compound this issue of jumping around and being in the shallow end of a lot of topics at the same time.

I'm not sure what the best advice is. However, trying to pick a focus and stick in that stack for a period of time either in work or outside of it, is a good start.

Collapse
 
ssimontis profile image
Scott Simontis

You bring up a really valid point I forgot to mention, thank you! My current career hunt has been really difficult psychologically. I would consider myself a senior-level dev, but with six years of experience and an incomplete education, a lot of places are trying to get me to see myself as a mid-level developer. It's especially frustrating with recruiters who refuse to even submit me for senior positions because they think that I will give in and just apply for the jobs they recommend.

I have been a generalist my whole career. I know the basics of React, I can read a query execution plan with a little bit of Google assistance, I'm proficient in a few CMS systems but don't care enough about them to dig deeper, and know enough DevOps concepts that people try to submit me for those positions. For the first time ever, I have felt like being a generalist is hurting me...maybe it only becomes a problem once you reach a certain point in your career.

I derive too much of my identity from my job, so it makes me feel worthless when I start questioning if I am a decent dev or if I have suddenly fallen years behind everyone else. I compare out to other people my age. I wish I could master everything, but I 'm going to have to find something to commit too with much greater intensity. I'm thinking about focusing on cloud technologies...I guess wherever I end up getting my next job will heavily influence what I specialize in.

Thank you for that insight!

Thread Thread
 
laurieontech profile image
Laurie

I completely understand that fear and insecurity! I think some of that is a failure of the hiring practices and how we view developer skills and value. All the best to you and your search!

Collapse
 
defgrav04 profile image
Mina Oh

Thank you for your insight and for sharing your experience. In a way, I think we're on the same boat. Being a "jack of all trades, master of none" will hurt you -- and it is most emphasized when recruiters try to categorize you.

Focusing on one thing truly is a formidable challenge. I wish it were that easy to just 'pick a stack'. My heart says mobile development but my skills say C#. If I "follow my heart", I'll be stuck in a junior position with less than half my asking price. And I can't afford that -- with bills to pay and family to support.

When I tried to delve back into Java, no one will hire me for a mid-level position because my work experience in my past job is only C#. Side hustles don't seem to count in the corporate world -- or at least in my country. It's actually frowned upon in some cultures because it implicitly means you can't get a job so you freelance -- but this is another issue altogether. Haha.

"I derive too much of my identity from my job."
This is so true. It's paralyzing. There will always be someone better.

I think the best thing we can do is to stop comparing. That's why I eschew social media, bearing in mind that we each have different paces and different times. And our time is yet to come.

Collapse
 
ssimontis profile image
Scott Simontis

There is still hope! I just got back from a company where the CTO wants everyone to be generalists. It sounded like an amazing DEV culture...you're basically free to implement things however you please, but if you break something it's up to you to fix your cleverness. I think a lot of it comes down to company culture and attitudes, and unfortunately the majority of companies out there have pretty shitty views on how the world works. I would rather have someone who is overall smart, regardless of what languages they know, than an expert in a language. Smart people can pick up new things quickly and relate their past experiences to new concepts. There's people out there who can tell you every condition in the C Standard which leads to Undefined Behavior, but can't write a line of useful code.

You're totally on point with your last paragraph. I struggle with some pretty severe mental health issues which make it difficult for me to feel a consistent sense of identity, so it's really easy to rely on my job for a sense of self-worth instead of working on accepting the hand I was dealt in life. I have a lot to be grateful for and it's a blessing I can so something I love in spite of my disabilities, and I can remember that instead of getting caught up in the rat race :)

I am extremely biased but I would say C#. You can still use Xamarin for mobile apps, I don't know how big Xamarin is now that React Native is out.

Thread Thread
 
defgrav04 profile image
Mina Oh

That's awesome. There's only a select few that adopt such culture. Big companies usually adhere to strict processes and rules that leave little room for growth, creativity, and inspiration.

You're in great company and culture.

I can still do my best on both, but it won't be easy. I guess I will focus on one for now, then eventually let C# go and focus on React Native next year. Since I want to get out of the rat race and build something of my own, React Native is the way to go, I believe. It's easier to build products with react, and therefore, making it easier to validate to customers.

Our discourse has been insightful. I'm loving Dev.to and the community it has. Everyone is supportive, professional, and respectful. :)

Collapse
 
kyleljohnson profile image
Kyle Johnson

I tell my students all the time. IN THE BEGINNING STOP TRYING TO LEARN EVERY LANGUAGE! In the beginning, get a job, learn one language really well and then expand your knowledge of other languages. You will find out that all other languages are 90% the same.

Collapse
 
defgrav04 profile image
Mina Oh

I know. But, it's hard for students to make an informed choice, especially when a specific programming language is taught in school, and it is a requirement to master said language to graduate -- it's part of the curriculum, after all.

That's what I felt with Java. I was good -- like really good -- at it once. Java 7 era. But I had no other option. I spent more time with Java (two semesters - that's a whole year) and only a fraction of a semester -- or one semester at most -- for the others.

Then, I joined the workforce, joined online classes, and found something better. So, it's hard to really choose one language when you are a student.

But, I do agree with your advice to your students. Focus on one thing -- and be a master. I didn't learn that in school. I actually learned that from reading non-fiction books and relevant articles :)

Collapse
 
tchupp profile image
Theo Chupp

I know a handful of people that have been able to do quite well in their careers with only learning one language.
I also wouldn't necessarily contribute success in a career as a developer with being an expert in a language, although it is hard to be successful without being comfortable with a language.

My language journey was C++ for school, then Java for 3 years. Then exploded into a bunch of languages, starting with Kotlin (for Android & Spring). Kotlin got me interested in Functional Programming. From there I tried Go (for working on Docker/Kubernettes stuff), then moved to Rust. I fell in love with Rust and have been using it for my personal projects since then. I've also dabbled with Elm for front-end, and Typescript for server-side (making heavy use of github.com/gcanti/fp-ts)

Personally, I love learning new languages! I feel like I never noticed language features in Java that held me back until I experienced the expressiveness of a type system like Haskell.
I don't think I could point to one language that drove all this, I think that learning the ins and outs of all of these different languages and runtimes gave me insight into limitations in others.

For instance, in Java, I never realized how much we rely on Exceptions to communicate failure; even when this failure is expected and/or recoverable. For example, an HTTP request can return 200 that says "heres what you asked for", or return 404 that says "I couldn't find what you asked for". In Java, the 404 might be communicated as an Exception, even though it is a common and expected response.

Go, Rust, Haskell, and many other languages, avoid Exceptions except in situations where recovery is possible. Instead, functions may return Result objects that communicate the potential failures.

The most important lesson I took away from learning many languages, was realizing I wasn't using the right tools to accurately express my ideas. I think moving forward with your career is about being able to affectively communicate your thoughts and ideas, and the medium we - as developers - use to communicate...is code!

Collapse
 
defgrav04 profile image
Mina Oh

Thank you for your valuable insight. I know what you mean. At a technical interview, one of the questions was "what is your favorite programming language?". I answered "Java" and am now too embarrassed to discuss my shallow reasons for it.

Years later, I realize that a programming language like Java is difficult to learn and too verbose. When I studied Groovy, Python, JavaScript, React, and even Swift, I was utterly amazed by how simple it was to execute a task that is otherwise too complicated when done in Java. When I studied C#, I fell in love with functional programming and saw how amazingly easy it was to handle lists and other Collections. Well, Java is making its way through functional programming, but it's not as good nor as simple.

There is a beauty to knowing a lot, the breadth, not depth -- you can compare and contrast, gain insight, make more informed choices etc. It's like life -- travel while you're young, explore, try out many different takes, make many, many mistakes, and learn. Then, as you grow older and more mature, it may be time to settle down.

So, I guess I have done my share of exploring and it's time for me to settle down, too. :D

Collapse
 
tomasforsman profile image
Tomas Forsman

A friend of mine is a wonderful photographer. She is really excellent and takes pictures I can only dream about.

Another friend of mine is a painter. He has such a creative mind it blows mine every time I hang out with him. The way he sees a white canvas and just...creates. Amazing.

A couple of weeks ago I figured I'd test a hypothesis of mine, that we always undervalue our own skill set and wish we would be more like the other side. So I started talking with my photography friend about art and showed her some of the paintings my other friend had made.

At the same time I was chatting with my artist friend and showed him what she could do with a camera.

Both conversations were pretty much the same. They both started to raise the other person to the skies and talking how they wished they could do what the other person could instead of just what they did themselves. She talked about how he actually created something new that wouldn't exist without him. He was going on about how she actually captured the beauty of the real world and saved her subjects for later generations to enjoy and admire.

In the end I did a copy paste of both conversations to the other and promptly logged off. Next time I talked to them they both said the same thing, that they had started crying while reading the other persons conversation.

So...yes, the there is a great need for people with deep knowledge in one language, or even in one small area within that language. But there are also a need for people who understands development, who is adaptable, who can talk programming with devs from different areas, with those in charge, with customers. There's a need for people who understand different parts of the stack and how they fit together, who can see problems from many different views at the same time, who can learn that new language really fast because we need to connect to it with our software, who can make decisions on what tech to use for the next project based on a broad knowledge of different languages.

You are looking at paintings with the eyes of a photographer and that feeds your impostor syndrome. Stop feeding it and be proud of your knowledge, not just the depth of it, but the width of it as well. Be proud of being the constant newbie, because as a newbie you never go at a problem with a set mind, you always bring different perspectives with you. Your way of learning and evolving has value and it's not less than someone who has spent 30 years coding servers in C.

Collapse
 
pris_stratton profile image
pris stratton • Edited

I don't work in the industry but I still code as a hobby after studying software engineering at University where I learned Java.

I am addicted to learning new languages and it stops me ever being productive and have enough knowledge in one area to feel confident going for a job in coding.

Over the years I have learned bits of SQL, C, Perl, Haskell, VBA and done a lot of JavaScript including Node/Express. Yet I have zilch to show for it. I am currently having to stop myself from starting out with R as I know it will distract me for six months.

I plan to make 2020 the year I finally produce something ๐Ÿ˜†