Ask HN: Yet Another Software Engineer; Help?
If you ever worked for an Asian Multinational company, you really don't have a choice midst thousands of other Software Engineers. You are to go and work in the department they ask you to. We in this group work at various tools like HP Operator Orchestrator, ServiceNow[1], Salesforce etc., meaning pre-packed and developed applications. We customize these Tools or applications as per the needs of the Customers. I was able to learn the tools easily because an expert in one of the tools, and worked on it for 3 years. In the mean time, I lost all my programming skills. I now don't have any programming skills what so ever.I can still write snippets of code, I can visualize and write algorithms in Javascript, but I really don't know any language. I tried to learn Python for a bit, and wasn't successful, I gave Go a shot and failed again. I'm at one stage of my life, where I really don't know what to do. I know one thing, I don't want to work on these "Tools" for the rest of my life. I want to learn and develop solid applications. I know some of you are like me, what did you do (or) what method did you follow to go back to development after a stint of bad years? I really don't have anybody to guide me. All the seniors I work with have no idea what Go is or what Git is. Help me please, before I completely give up.
Thank you, for reading.
[1] http://www.servicenow.com/
10 comments
[ 3.1 ms ] story [ 34.6 ms ] threadIf you are expecting to pick up a new language you cannot expect to code at the same speed as the programming language you have been working on for quite a while with. But that is not necessarily a bad thing.
C/C++ have huge changes in the language updates as well so it is not too suprising if you think you have unlearned some of them. In retrospect maybe you just learned some of the algorithms rather than just learning the languages themselves when doing the languages. To re-learn them i'd look at more used libraries for C++ like libmusl and be aware that real programming is not all about just algorithms.
Instead of picking a new programming language to learn maybe you should learn a bit more about the "ecosystems" of languages. While almost all programming languages are good at almost everything, there are a few special "sweetspots" of coding in specific languages.
Some example questions you should pay attention to: Why are some programming languages used more than others for specific situations? What is the difference between a scripting language and a normal functional programming language?
Some of those questions have somewhat obvious answers. Many of the languages now are specialized in a few things. Erlang is great for passing data around. Rust is good for recoverability with a server. Go is good for concurrency patterns (but fails on some degree where concurrency patterns are not just steady/simple). Ocaml is good for security based programming because it is a static language(one instruction/way of executing for most of the language) it is also used entirely by at least one company that operates in the space of trading. Python is good for computing with numbers because it automatically can handle large numbers and can be easily convereted to C/C++.
I'd suggest learning the ecosystem of what drives what in a specific category. For instance do you want to get into machine learning? reverse engineering? devops (automated deployment)? Picking some skillset that is out there already that is highly valued and then learning about programming languages by viewing what companies are doing is a good way to learn. You see business decisions that are made based on programming language, time, money constraints, and it's not all just about what they just had at the time for the bigger tech companies because if it sucked they re-coded it.
If you have any specific questions you can ask away below.
1) Find another job.
2) Try to introduce new technology at your workplace. Not a language like C++ but Frameworks that could be more productive for some projects, maybe some internal tools. E.g. Play Framework for web apps, Spark for data analysis, Docker for deployments, etc. Find a painful repetitive internal process and suggest building something to make it less painful.
3) Improve your programming skills outside the office by working on a side project or attending Meetups.
Like you, I graduated with Computer technology and was placed in an MNC. Same like you I worked with "Tools", not software, in my case it is Microsoft SCCM[1]. I was locked into this job for some financial dependencies and after some quick 3 years when I look back, I regretted all of my work experience. Not because it isn't worth, but it isn't what I wanted to be in my life. So, I decided that whatever I should do, I should, to become a software developer within 2014 end and I would say I accomplished it since, I am joining as an RoR developer in a month. (all within 6 months)
Some of the points,
1) I started from the deep basic level ultimately from HTML and CSS stuff. I didn't think myself as an CS grad, but a self-learning programmer and did whatever a self-learning programmer will do. I call myself that. For example, I was asked to prepare myself with JS and Coffeescript in the new job I am joining, so I started learning JS from yesterday. Even though I have learned and practiced it 4 months before, I started from the utter basics of it just to brush up my knowledge on it.[2]
2) You are right, even none of my colleagues are aware of Github, HN, Git or even Ruby as a programming language. I was one of them one year before. I didn't know any of the programming stuffs at all. All they / I had known is Technet, Sourceforge and most of the IT forums. So, don't expect any kind of assistance from them.
Glad you are from US which is going to help you a lot. Being from India I struggled a lot even to get answers for some of the tiny doubts. Sometimes, I had to work through night since in StackOverflow, questions will get answered much quicker in EST time. 4.30 PM IST to 3.00 AM IST was my regular learning hours. If I went to any meetups there will be no more than 10 people in it. I didn't had any mentors, but if you could, get one, it is going to leap you 10 steps each time.
Start from the basics (I mean really basics) and go by the path as any beginner programmer would do. Don't assume yourself as a programmer yet. Assume you didn't had any CS degree or whatsoever. Go to Meetups, read Blogs, If you really want to be a programmer, commit yourself 200% into it.
I am not going to comment on the programming languages, Books to study, or projects to do. If you really hook into it you ll get to know them naturally.
All the best.
[1] - http://en.wikipedia.org/wiki/System_Center_Configuration_Man...
[2] - https://github.com/avinoth/LearningRepo-JS
Becoming skilled takes deliberate practice. If you're not willing to put in the effort I wouldn't expect much in the way of positive results.
There has never been a better time to self-educate and participate. Pick a project, pick an ecosystem, and begin.
Kindly define not being successful. If you mean you gave up, then next time don't. Also, quit your job if you have to.
So what if you didn't learn Python and Go in a few hours? Try Lua or Boo or Rust or Scala or MUMPS or Smalltalk or Erlang next. Load up Node and write some JavaScript code. Download Eclipse and give Java a whirl.
Find something you like. Then worry about learning it. Because it will take ten years.
http://norvig.com/21-days.html