I'm looking for wisdom and pointers from the community here.
How can I go about it? I have access to Coursera/EdX and around 1.5 years to focus full-time on retraining. Any advice would be appreciated.
- "Learn Python the Hard Way" by Zed Shaw. 52 exercises to teach you just enough Python to be able to continue.
- Next, an excellent course by Reddit's co-founder, Steve Huffman, CS253. It was discontinued from Udacity, but is available on YouTube: https://www.youtube.com/playlist?list=PLAwxTw4SYaPlLXUhUNt1w...
It will take you through the basics of the internet, HTTP, browsers, requests, cookies, databases, caching, hasing, passwords, by having you build a web application. Granted, it's on Google App Engine, but still, most of the router syntax out there is similar (webapp2 from web.py, similar to Flask, Tornado, and others).
You will learn a lot, and you'll see the result right in your browser by having a live web application. You can then take that knowledge and develop tools for yourself and others and put them online for all to access and use.
If you want to do it better and "leap-frog", read Brett Slatkin's "Effective Python: 90 Specific Ways to Write Better Python". This book will make you write code as if you had been coding for years... But, that's only doing it "right", you need something to do right in the first place: you've been in business, strategy, and operations, and you've been trained in mechanical engineering: I think you are in no shortage of ideas and things to code, so have a it.
You're in an excellent position of having been at the intersection of a bunch of cross pollinated fields, and you'll have a new skill to bring them together and do wonders. All the best!
If you haven't developed an allergy to this background, and you're interested in the business process side of IT, I'd recommend building off of what you already know. Domain experience is invaluable and far too rare in technical roles.
This has been my own path. I knew just enough about computers to know that tools existed to eliminate tedium from my workday, so that's where I started. I didn't have to step away from my career at all, so it was very low risk if it didn't work out or I discovered I hated it. It did work out and I discovered I enjoyed the process. Importantly, I discovered that the grind of writing actual software or doing standard IT work doesn't agree with me, rather it's the problem identification and solving process. So, now I'm straddling the fence between the IT person who does lots of automation work, and the process improvement person who tries to make the business run smoother and everyone's workdays better. It's a rewarding and appreciated role, and one where age (also in my 40's) is a real benefit.
This means things like
- reading and understanding an existing, complex codebase
- solving your problem in a way that doesn’t harm existing functionality
- refactoring old code to solve new problems or to be more reliable
- common workflows using version control
- writing testable code that can evolve over the years
- negotiating technical scope with stakeholders
- navigating technical risk and technical debt
I think this stuff is teachable, but it’s hard to give someone a project where the existing code base must keep working (or else the company goes under) but also here’s 4 features to implement in a given aggressive timeframe. Much of having a job coding is about these kinds of decisions.
I say all this so you can decide whether this is what you want or if you just like coding as a hobby.
Think about why you want to learn programming. For me it's because I like to make stuff and programming is a natural extension of that, but other people have different motivations.
Not every programming job aligns with every person's interests in the field, so as you build your knowledge it is as important for you to understand what you enjoy as understanding various technologies.
Don't focus to much on certifications or qualifications. Do focus on a portfolio. Find things that scratch your own itch to work on and learn
It pains me to see many friends and peers wasting their lives with low pay dead end corporate jobs they clearly don't like. I am glad you've chosen to reinvent yourself. Being an older person among so many smart 20 something guys and girls sure keeps things refreshing
Try web stuff, python, databases, 3d graphics, and the things you like.
Even though it wasn't my first language, I'd think python would be a great way to play with something simple and powerful. If you're smart, may as well skip those and go straight to low level like Rust or something.
If they asked you what to build, you’d tell them to build something that’s useful. Better yet, build something you would use.
If they asked what resources to use and learn from, you’d tell them whatever resources necessary for the task at hand. To focus on the practical more than the theoretical, while filling in gaps of time learning theory.
If they asked you what to do when something fails, you’d tell them to build it again until they build it right.
And when they ask you what to do when they’re done, you’d say: “now go and build something else”
We started with relational databases and SQL, since that’s core to the application we’re working on. He originally asked to get involved to run ad hoc reports. Then we moved on to web development, front- and back-end. He struggled trying to piece together all of the parts that go into making web sites, but I focused on fundamentals so eventually it would all make sense.
I think this worked for my friend because he was able to jump in to a working system that is still under heavy development, for a business domain he understood, and the rest of the team agreed to help him learn. That was pretty much how I got started in programming 40 years ago.
It seems that very few companies are willing to train and develop junior programmers, preferring the tech interview performance and the illusion of hiring the top 5%. It wasn’t always like this. If you can find a project you can jump in to with patient programmers who will help you learn that’s a great path, but such opportunities seem few and far between.
* Play to your strengths
Leverage your experiences and map them over to software. The only real difference is that the QA and shipping process can be updated hourly vs hardware which takes months at minimum, so build perfection isn’t as hard of a constraint.
Leverage your finance, strat, and operations knowledge. That’s basically the Eng. Manager’s job (Director level/VP level?). Most coders can’t tell you the business value of their code/tasks - that’s a problem to bridge the value prop back to the business side. Also most “Eng” think there’s infinite resources, but don’t account for costs $$$ to use cloud services.
My advice: * learn the software construction process * DO NOT GO INTO IMPLEMENTATION - unless you’re super passionate about it, there’s no way to be proficient or good at it in 1.5 years - college grads will lap you. CS grads by default have done it for 4years and are still usually not that ready to switch from solo academia into a team, corporate standard.
Hope that gives you a perspective to consider!
What is your goal? Earn more? If so, then look for jobs in your area and see what is “hot”. The role you call “programmer” is nowadays called “software engineer”. Do a search for that, make a note of requirements from every job you can find (top 50 jobs). Google every common keyword and see if you can figure out which programming language is “hot”. You will also need to decide what you want to do with that language: desktop, web (backend) or web frontend (I’d recommend to stay clear from fullstack and low level).
The road ahead is rough, but I’m sure you can achieve what you want, if you ask the right questions before mindlessly diving in.
So, go after the things that interest you, learn them well, and try to manage your way into the related market with whatever you have at your disposal. The computing market is pretty forgiving with failed attempts, not so much with lack of motivation.
Play by the rules in the interview game. If you want to get into somewhere and they do X at the interview, train and do X to the best of your abilities even if it makes no sense.
And be approachable, make as much contacts as you can. This is a contact-based market.
As others have said, focus on a portfolio. Start with a course like C193p and then build a few good quality products.
In my opinion as a 20 year software veteran, the skillset many software engineers lack is having a bigger world-view of company operations and why they are doing what they are doing. Some of that is obviously on the company structures they've been exposed to, but decent engineers with really good business sense go far, fast.
As johnwheeler said in this comment section, just start building something. I bet it comes to you pretty fast, and if you have an engineering brain, you'll start seeing the pieces move in your head just like any other system. I really don't think you need "retraining" per se, just start applying your business sense and engineering skillset to software. Consider even looking for companies where both are required, like places that build mechanical things controlled by software, and look for roles that offer the potential for some cross training.
I took an in-person course at General Assembly in 2017. The group support with the immersive environment was exactly what I needed to find the confidence and excitement to carry this career transition through to fruition. I spent many 12-hour days coding non-stop. Personally, I don't know if I could have done this on my own in a non-interactive environment. I still keep in contact with some of the folks I graduated with.
If in-person is not an option, make sure you find a way to have one-on-one interactions and peer reviews. The communication of your work to others is key.
If you want to get to throwing fun things around as fast as possible look at game modding or creating your own games with some of the scriptable game engines. gentler intdroduction with quicker rewards.
Just a couple ideas that popped up first. What kind of programming are you looking to do? do you get excited by the possibility of squeezing a few more bits out of noise than current data compression algorithms can? Or do you want to make the perfect digital emulation of a furry dolphin avatar? There's shared knowledge there but further indication of your interests can help.
Biggest challenge will be choosing a language and executing the program!
I hope the comments here are helpful. We would love to have you -- if I could speak for the world of software engineers at large -- make the transition, your fellow engineers are here to help!
The Changelog did a podcast about Sean who learned in public. By being humble and open to learning he bootstrapped his way into a career. He mentions FreeCodeCamp and then did a paid one after but your results may vary. Check out the conversation here: https://changelog.com/news/P5Gg/visit (I've no affiliation with The Changelog other than being a fan).
How do you like to learn? For me videos don't really work. I mean they work to get the basics but I have to build something to really get the knowledge in my skull and to keep it there.
There are a number of free resources via Youtube and Github like this (https://github.com/ossu/computer-science) that just require the investment of time. Consider a blog to log your learning over time the feedback could be valuable.
I hope that helps. Find me on twitter @gigatexal and via email alex at alexandarnarayan dot com
I am 50. I made something which solved a problem in my workplace 15 years ago. It still makes money for me.
My programming skills at the time were rubbish. Copy, paste, tweak. No reason why you can't do the same.
View your journey as fumbling through learning a foreign language. Rather than joining a book group full of knob-heads who like to make other people feel inferior with their better way of doing things.
There are an enormous number of opportunities for software engineers right now, the market is hotter than I've ever seen it. We desperately need people to be retrained, cross-trained, any version of trained.
... if you want guided instruction (besides just online courses), to do things on the cheap, you can also audit classes at your local college - just find some key courses in Computer Science and ask the professor if its okay to sit in. I did this for two years for a second interest of mine, music-theory.
My advice is to get your hands dirty with some tutorials and a project to confirm that you definitely have that intrinsic love of programming and writing software. It's a hard career without it but a great one with it.
Your experience and maturity should also be seen as a great asset. What you might lack at the start in technical knowledge, can be partially compensated for by this. Even as a junior I found I was good at working on a project, knowing what the team should focus on, talking to 'the business' and acting as a bridge, taking ownership, showing initiative and being a self-starter. These are things you're more likely to have with age and they are definitely valued by good companies.
Then understand the technology stack you will need to build it. Then learn about that stack from Coursera/EdX. Finally build that tool and reap your fruits. :)
If you want to do SRE or SWE, the easiest way is to sign up for a bootcamp. All walks of life pivot in these programs and already being an engineer will make it a cake walk. The community college might have some programs too, but the boot camps tend to teach more modern skills and do job placement since that's often part of the program price.
I think most importantly is to decide what industry you want to work in. If you want to stay in your previous industry, you'll have a leg up since you already know finance, and crypto is hot now so there's lots of new tech and money to be made.
I think 3D printing is the next wave, and if you are already an ME, you can hit the ground running making robots that can print houses, car parts, rockets, etc.
You'll need to study the following.
* Computer science basics. The fundamental building blocks for computation. The bread and butter of algorithms and data structures. There's no way around this.
* You'll need to learn at least one or two programming languages in order to create actual computer programs and their related tooling.
* You'll need to learn at least one computational platform and its APIs and tools and generally how to build software for it. For example one of Windows, Linux, Android, Mac or web. Choose one.
* You'll need learn how to apply software to solving problems in any particular domain.
* You'll need to learn a ton a about the tools and practices of the trade. Distributed computing, databases, embedded, debugging, tools chains, design patterns, frameworks, APIs, libraries etc. Not all are applicable. What you should focus on depends on what what you want to work with and in which domain.
I think 3 best books on development ive read are: - the pragmatic programmer, - clean code - working with legacy code
My favourite on hacking and re is: - hacking the art of exploitation
Ive been developing various software for last 20 years and now im getting more into security as dev is simply not complicated and exciting enough/any more. i did crack cd checks and shareware and other stuff when i was a bit younger (im sure there are fans of softice in here :D) and i still know how to disassemble software and modify it.
So being a developer for so long helped me to take the hacking and re stuff easier today, because in the end if i know how to write software (even if its quick, im not telling you to learn design patterns) then it lets me find entry points, break and abuse it easier.
Get practical if you want hacking :)
1. Hackthebox.com 2. Vulnhub 3. Search for crackme's if you want to get more into reverse engineering
Im very strong introvert and self-learner so it took me some time to understand importance of mentorship or just being in group of ppl with similar learning targets. A smart advice and some tips can speed up your learning process and save you months. Find a group, join discord and ask a lot of questions.
Im teaching my 57 years old mom to code so no stress, its a matter of decission and effort, im sure you can do it if you want and especially if you have such background :)
Learn intensive cause then you'll get to your target faster!
Its nice to read that youre 'fascinated', me too. I must admit that getting my first reverse shell and rooting 1st box gave me amazing excitment and fulfillment :) now... hurry up, get yours as well!
Take classes. Work on coding problems. Read technical papers and books that might be just beyond your reach. But as many other have said, yeah, until you decide what "IT" means for you, I'm not sure what advice to give.
Being outside the traditional pipeline makes it less likely the traditional hiring processes will result in a job. Moreover, the further your education is from the traditional pipelines, the further the odds against the traditional hiring pipelines resulting in a job.
If you are going to spend time preparing, social preparation is probably at least as important as technical.
Perhaps more. Because the ceiling on benefits over a limited time is much higher and your starting point in your forties has twenty years adult experience over a fresh grad. While even if you’re technically 10x the average entry level programmer, you will still be just another entry level programmer.
Or to put it another way, if you want a job, look for a job. Good luck.
- WEB development - Data analysis - Automation - ... etc
Accordingly, if I were making a decision now, I would start with a full course on computer science. To refresh my horizons, because I'm not young anymore. And after that, I would move on to choosing a technology stack. And only after that would I make a choice of programming language. The good news is, at my age, there is enough system experience in my head for good ideas in the implementation of projects. And it inspires me a lot.
Basically if you really do have passion and conclude any little project you started ( it counts lot of points in cv, sometimes more than references...) I think you can get easily hired in low time as a Junior programmer.
If it's hard to answer that question, you might try going through your HN history to re-read the stories you upvoted. What stands out as a common thread?
I'd do this before trying to learn anything specific. Without a clear goal, you can send yourself on a 1.5 year rabbit hole with nothing to show for it in the end.
Do you have the money? Do a full undergraduate degree in CS.
Are you scarce on money? I would recommend you develop some useful broadly useful skills (HTML/CSS/JavaScript) using any quality resource that is available to you and that suits your level. As soon as you are able to do some programming, try to land a beginner job and learn on the job. Apply for a better position. Repeat.
So, I would recommend Flatiron or something similar. Self study will not teach you how to work in an industry - a proper bootcamp will.
Just my two cents, your milage may vary
I was working in administrative and funding roles for non-profits and hated it. I'd been doing it since school and had no idea what else I could do. I ended up going back to study, choosing a social science Masters with a strong quantitative focus. I really clicked with the code side of things. I'd done bits of BASIC, VBA, and Pascal as a kid, but nothing more than ridiculously over-worked Excel books since then.
I actually picked up Python at school before taking a module in it. A friend who knew I was interested in learning to code needed some data from a website and asked if I'd be able to scrape it. I said "No, but I think I can work it out." I still recommend a scraping project to anyone trying to learn to code. You need to have this very basic understanding of http requests, HTML, and flow control in whatever language you're using. And you get something out of it at the end.
I love reading programming books, but I find them best for consolidating and pushing forward skills. I feel I've learned best when working on projects, and personally didn't get on with things like Learn Python the Hard Way or online courses. May just be my learning style though.
I've built my skills though finding lots of little projects to do; either as part of my course, or later for a (sort of) related job, or in my free time. Whilst reading is definitely important, try and find stuff that interests and excites you that you can find an excuse to code with. Things I've really learned from include:
- Building a tool to create corporate networks from the UK Companies House API;
- Scraping and analyzing sales on a darknet drug site;
- Getting R code running in Python (Python sucks for survey analysis, R sucks for day to day use);
- Reverse engineering a police incident map to get at the underlying data;
- Working out the distance, by road, between any given point in my city and a fire station;
- Using the Blender Python API to make custom 3D-printable bases for my wargaming minis.
Good luck! It's daunting changing career and has been a slow and frustrating process for me sometimes. Totally worth it though. All the best to you :-)
The first thing to ask yourself is weather you can sit down and consternate for 10-12 hours without talking to anyone.
Second you should practice (not unlike practicing for a marathon) . Start easy and go up.
Third, try to become apprentice to some professional programmer, and learn from him (even for free), try to help him with some tasks.
If you're already an engineer you'll probably be able to do it somewhat easily.
As for getting a job, the market is hot right now, we'll see if it still is in a year's time.
It will help you plan out how to learn this in such a short time. It will also help you learn on your own terms,
One of the first steps is to really learn how to use Google and the websites that come up such as documentation to search for and leverage information and tools to solve problems. This is a completely different way of working from many jobs such as finance, management, or perhaps even mechanical engineering 20 years ago. Where you might have a set of learned tools or approaches that you keep applying over and over.
One example is this. If you pick a Python course from a few years ago, it might recommend a certain syntax or library that makes it harder for you to achieve a task down the line than it would be if you used a feature that had been invented within the last few months.
It is really critical to have the mindset of accepting Google and online documentation or articles as your friend and ally and not some kind of weakness when you consult it.
But to go back to the first part, you will want to find projects you can be relatively passionate about at least for a short time. Because programming is about being persistent and nailing down a lot of details. And you will need that level of interest to keep hammering at a problem. Also you need to practice approaching problems from scratch without knowing a preset approach. Rather you do the research as I suggested, try different things related to your specific problem, and really have to evaluate approaches based on experimentation rather than a pre-learned approach.
Also you will have to practice interacting with users because requirements are the hardest and most important part of programming. There are two main traps: not listening to users carefully, or listening to them too carefully. Often programmers will dismiss feature requests because they seem too difficult, but sometimes these are the real value add for the business and can be achieved by leveraging existing tools and libraries. The other opposite problem which is very tricky is that users are often quite explicit in what they ask for, and those requests often completely misjudge the business requirements or inadvertently misrepresent them because they don't understand the technology. The trick is not to just take what they say, but actually understand the job they are trying to do, and use the feature requests as hints, but with a grain of salt. It's hard to do that and simultaneously really listen to what they say, because they can throw in quite critical information that needs to be interpreted properly in the midst of a lot of nonsense.
i would study for and pass the AWS Developer certification as quickly as you can/like. you still need supplementary materials to pass the cert tests the first time, fyi.
at that point you're more than good enough to get hired and do real work.
after that, continue to do more certifications, i'd probably go with the devops cert next.
build a stupidly-small and simple app and put it on your github, and make sure you do all the things you're supposed to do and not do - like store your secrets in public. the mistake here is you will think, "_This_ is really truly stupidly simple." -- but it won't be, and you'll spend too long on it, etc. The point is to actually go thru the whole dev cycle, complete it, put a bow on it, and be able to talk about it to prospective employers.
complete that stupidly-small and simple app with docs, etc., then move onto another.
to me, 'learning to program' is a bit misleading, because learning a language is relatively simple - what gets complicated is learning all the other stuff -- like git, which is impossible. so you just gotta be comfortable with git, and an IDE, and writing code, testing it, deploying it, the 'full development lifecycle' (FDLC).
i would pick one language to focus on - and i'd argue that can be whatever tech or type of business problem really interests you.
so if you want to help build the website for some cool high tech company like flexport, then learn javascript/react.
if you want to do data science, then learn python/pandas/anaconda/etc.
if you wanna do iOS apps, then learn Swift or Kotlin for Android, with the corresponding adjacent/required tools/technologies.
being a generalist is worse than useless -- i would not advise it.
'devops' is a good place to start, imo, b/c it's literally half dev and half infra, so you don't have to be really good at either -- just dangerous.
same goes for tech support -- you can look for 'technical support engineer' or 'support engineer' jobs and be employed within a month (like, 4 weeks from today, even without more knowledge than you already have) and start learning on the job while you do your coding/learning in your spare time. this is a slower route to a coding career, but it also provides you an easier way to slide into dev - you'll know developers, you'll know the product, you'll have relationships, you'll know every bug/feature/etc., you know how the entire support process works, etc.
good luck!
...ps, this never happens, but i'd love to hear how it works out for you - would prob have to be on a new thread b/c i think they auto-close after a while.