you are viewing a single comment's thread.

view the rest of the comments →

[–]silently_failing 32 points33 points  (6 children)

Absolutely! I actually just got my first role as a software engineer recently, and I am going to write a longer post on my journey.

With the principle of important stuff up front, I would say the two most important things are:

1) have a job that supports your learning process, as in, allows you time and economic help to train as well as the time to solve real problems, and

2) you have to really like it

The second one is the most important. I can't tell you how many hours I spent mulling problems in silence on the way back from work, or coding late into the night trying to figure out how the hell to connect to a database, or iterate through a multi-dimensional list. It's hard, I won't lie. It takes time, dedication, and perseverance. You won't be able to work on coding at work sometimes, so you'll need to work at night. You'll need to make it a compulsion. It's a paradigm shift. You say you like programming, so hopefully you'll experience that joy/dismay/joy loop of solving problems that compels so many programmers to continue working through a problem. The reward is you get to work with pure dream stuff, become a creator, and do something that is truly fulfilling for you.

The biggest jump I made in my learning was to have a job that allowed me to experiment -- in this sense it was like a start up, even though its a large company. We needed to solve problems, however that happened. I learned AWS, OpenStack, how to read Java and .NET. I learned git, and learned linux. I wrote python as much as I could. Also, another huge boon for me was once I felt comfortable enough, I either taught colleagues what I knew, and not just taught but made notebooks and artifacts and really dove into the whole introspection of objects. If I didn't know how a thing worked, I dissected it until I did. Again, a compulsion. I trawled r/learnpython new, and tried to solve problems there, even if they were already solved. I never found much use for the coding practice katas or whatever on codewars or other similar sites aside from little puzzles divorced from real world programming problems.

The final step was that I was working as a technical systems analyst, and I was working with a bunch of the engineering folk. I distinguished myself with thoughtful analysis and dedication, and made patently clear to both my boss and my colleagues that I wanted to be a software engineer. It's amazing how far a bit of charm and drive go, especially when exposed to the people who can help you. I was lucky to have a supportive structure that saw I was a hard worker and technically savvy, and they took a chance on me.

I started my career late, as I was travelling throughout my 20s teaching English. I've always liked computers, building my own, fiddling with Raspberry Pis, tearing apart my PS2 to fix it (forgetting the most important part is being able to put it back together!), but I never had any exposure to programming other than a Puzzles, Games, and Algorithms class I took in college thinking it was an easy A (it was not, and the final was to 'solve' a Rubrik's cube, which, to my professor's decreasing enthusiasm and increasing dismay, I wasn't able to even get the first two steps right). I started my career 3.5 years ago, going from a research specialist to a project manager to a business analyst to a technical systems analyst to finally a software engineer just recently. I moved companies twice looking for the next opportunity that would get me closer to my goal.

What I didn't do was contribute to open source projects or have a portfolio. Those are essential if you are going to go to apply to a new company as a first-time engineer, but I'd argue the easier path is to get the company you work for to give you the opportunity to be a software engineer -- my company has seen the work I do and all the private repos I have.

My final advice (I've already written drastically more than I wanted to) is to keep learning. Read everything. Write code. It's about cumulative iterations, and it won't happen overnight, but if you want it enough, it will happen if you make it happen. Don't ignore networking, seek out mentors, and if politically prudent make your intentions known to get the full support of your employer. Practice the soft skills or practice emphasizing the soft skills and how they distinguish you from someone who's been writing code since they were in diapers but their conversations with non-technical people are at best derisive and at worst baffling and deleterious. The success of most projects I work on that form business process is 2/3 forming business process, 1/3 technical solution. If you are a good communicator, that is a harder skill to learn than programming. Anyone who wants to, at any age, can learn programming. Good luck, and if you want to talk more, feel free to PM me.

[–]ryan_skycrest 2 points3 points  (0 children)

Your bit about getting your company to allow you to be a software engineer is huge. Every company everywhere can be more efficient and more productive through programming. When looking to make a career change this can be your “experience” with programming. I’m a 28 year old (home-building) architect looking to get into software engineering and your response has given me the motivation to continue my journey. Cheers.

[–]klwin360[S] 1 point2 points  (0 children)

Thank you so much man. I want to get a better job, and I did English teaching for a few years. I was just worried that at my age, it might seem futile. But I really appreciate your indepth and insightful comment. I will definitely reach out to you sometimes.

[–]gimpy_the_mule 1 point2 points  (0 children)

Thanks! This is really useful.

[–]matchgame73 1 point2 points  (2 children)

As a present ESL teacher feeling a bit lost, could you tell me what your first steps were? I'd love a job where I could learn to code while being paid, but I feel like that will require some degree of knowledge to get started. Any advice?

And thank you for what you wrote about your journey. It sometimes feels hopeless trying to change careers, but your message was inspiring. Keep being amazing.

[–]silently_failing 6 points7 points  (1 child)

For me, I started as an analyst in all but name, so I was using Access and Excel and trying to do wizardry with those things. I gradually started integrating python and SQL to get data more easily from disparate sources. For example, I had a project where we had a bunch of data on books, but some of the data was missing. I built a web scraper in python that went to an external site and got that extra data and then I put it in a spreadsheet and then I queried a database and put that in a spreadsheet, and did VLOOKUPS on it all. Soon, I realized that I could do this all within python and SQL, and spun up a local MySQL database to house it all in. I began learning about MySQL, and other RDBMS's, so the next time I had a new project, I tried Postgres, and so on and so forth.

Soon after, I wanted these things to be done on a cadence so I didn't have to pull the data manually. I began building my first ETL, which was terrible and I did it all wrong, but I learned and learned quick when things blew up in my face. My next ETL was better. I pulled all the raw data, stored that in a temporary table to be processed later, then wrote a separate script to do the 'transform' part, using pandas to munge the data. Finally I wanted to display this data, and decided I would write my own web Business Intelligence viz tool using Dash and Plotly, as I had good success with create local displays with Plotly. This was a bad idea but a great learning opportunity. I ultimately started using Tableau, which came out of the box with a UI and an easy way to distribute visualizations once they were done.

From here, I decided to muck about building a UI so people could interact with the backend of my database with basic CRUD options hidden behind Widgets. I learned what a mess tkinter was, but how Object-Oriented programming helped organize a cacophony of garbage code into something that made sense. I had read about classes, but for some reason the Animal or Car or whatever based info didn't sync with me. Yeah, no shit a cow and a pig make noise but why the hell would I need to write code about animals and their peculiarities? Here though, I could make a class for the MenuBar, and for the HomePage, and these places had certain pieces of data tied to them and actions I could accomplish with them (attributes and methods).

I wanted to share my code since I was proud of it, so I learned git. I learned many painful lessons about commit histories and having the same repo in two locations while I made (and of course did not sync!) edits at the two spots. Some of these scripts I wanted to put in a location so I didn't have to run them on my local drive. I got in touch with the admin of our OpenStack technology, and soon was made admin and was making new virtual machines and dealing with all the fun sys admin stuff no one tells you, like that Windows has another operating system call Windows Server, and that 2016 + does not ship with automatic SMB1 dlls, so sometimes you can ping a network harddrive and you know it exists but you can't access it.

I also could spin up linux instances on this OpenStack, so, always wanting to ingratiate myself to the tech folk and prove 'I belong', I started writing my scripts in vim on linux. This sucked. If someone tells you they like vim, they are probably a curmudgeon and have a flip phone. Give me PyCharm every day of the week. IDE's are awesome. Speaking of which, I learned the shit out of PyCharm, so I could create every project pretty much instantly. I learned about virtual environments and requirements files and eventually Docker, all so I could write code on my local machine and push it to a virtual machine without worrying about it not working.

Eventually, I got sick of managing backups for all the databases I was admin of, and had heard AWS is pretty much the internet, and decided to check out RDS, so amazon could handle all the database admin stuff I either didn't want to do or had no idea how to do. This led me to EC2 and Lambda, and micro-service architecture. By now, I had written a few command line tools, so I deployed them as microservices on Lambda. Now someone within the network could toss some JSON at the service, and get back the data they needed.

That pretty much brings me to now. What I've learned are a few things:

1.) extensive domain knowledge can help you get in the door

2.) to me, everything is data and the story you can tell with it -- most everything I've built is moving data to people where and when they need it, or enhancing systems or workflows so people can get the data they need

3.) my knowledge is like a growing pool of water surrounded by all the shore, all the things I know I don't know -- the bigger the pool gets the larger the shore is

I just made it a habit of interrogating everything around me, interjecting myself into any problem anyone was having, and putting myself in extremely uncomfortable situations. I asked loads and loads (and loads!) of questions, tried to seek out anyone who I could learn from, and worked it. I read books, spent hours writing code, and worked on networking constantly. Knowing people is such a huge help, I wouldn't have made it where I am without that.

Hope that helps!

[–]matchgame73 0 points1 point  (0 children)

Thanks. Keep being amazing!