4

I have a slightly different issue I am running up against than it seems most people on this site usually address.

Initially, right after graduating with a Master's in Economics (2010), I joined a startup and became the resident coder. I had some familiarity with different programming environments, but never learned anything formally. I only really ever learned how to use a small set of tools, and only in the specific scenarios that were useful for my job.

Anyhow, fast forward ten years and I have fallen into the role of programmer again. This time, I have taken a position at a genetics research company. I can usually "get things to work", but I am spending 16+ hours a day solving these problems that I don't know if they are truly as difficult as they seem.

It seems now that I am just stuck because every now and then, something really works well. My supervisors have very high expectations. I don't think anyone has any idea that some days i do not sleep at all (literally).

My question is this: Given that I have a job that involves a substantial amount of coding, where should I start to formally learn from step 1?

I have tried and become irritated with tutorials only because the speed is invariably for a complete novice.

10
  • If you want formal education then going back to University and enroll in Computer Science would be the way to go. – DarkCygnus Jun 26 '20 at 1:50
  • 1
    Whats courses or steps or anything have you taken so far, on the Programming topic? – DarkCygnus Jun 26 '20 at 1:51
  • 2
    That being said, I can't help to feel that this question is off-topic here. Basically you are asking "where can I start to formally learn to code?", and that by itself has nothing to do with navigating the Workplace... however, on the back of my mind I feel there is an on-topic question somewhere in your post, but I'm unable to think of an edit yet... – DarkCygnus Jun 26 '20 at 1:53
  • @RyanWard, basically you seem to be saying "I've tried some tutorials and didn't like them." There are and can only be three possibilities (1) read and study textbooks (2) do and study online tutorials (3) go to college for a degree or course. If you tried "2" and the ones you tried you didn't like, then search for more or go for (1) and (3). Id say really you should ask this on the software engineering site? You're simply asking "Does anyone know any good comp sci tutorials?" Right? – Fattie Jun 26 '20 at 12:37
  • @DarkCygnus I think very simply the OP needs to ask, obviously on the software engineering site, "Can anyone recommend good books or tutorials for an experienced informal programmer?" (Which is indeed an incredibly common question, and if you google it you instantly find scores of websites devoted entirely to the idea "Can anyone recommend good books or tutorials for an experienced informal programmer?") I see no connection to this site, which is about issues like how to negotiate more pay or get sexually harassed at work and is my microphone good enough for remotes, etc. – Fattie Jun 26 '20 at 12:42
4

I was in your situation before and somehow I managed to get there bit by bit.

After 6 years working as QA in IT industry and I switched to become a programmer. As I entered in this programming field, although I code during my QA days, it is nothing compared being the one who develop it. I also spend lots of sleepless nights because of an error that I haven't encountered ever in my life. Same as your frustration, I looked up to different tutorials, quite a lot, although it helps me but it was not to the extent of my own expectation. As you said, somehow I can develop things but not the level of I believe I should be. I was like, how did I make these things works even though I barely understand it, well it helped me keep my job though. It was tough, since my company sees me as a very technical person that can learn things quickly but I am not, I just worked hard.

So anyways, the first thing I did:

  • Try assessing yourself. Since I can code but I don't know how to have a good structured programming. So I bought books like about design patterns and clean code.
  • Be proactive. Since my company is more on Java side, I focused in there more. I start coding on my free time, applying those design pattern I've learned. It really help me a lot to clean up my spaghetti style of coding.
  • Be knowledgeable. Before I don't believe on understanding the technical terms when developing something, as long you understand how it works, that is good for me back then. Like for example, I know what is immutable but I didn't know it was called immutable. Funny it is? So it really helps that you understand these things. You will be able to explain more of your problem or you can understand others with their problems more, if you know it.
  • Ask. If you don't understand anything, don't be afraid to ask. No matter how much years of experience we have in this industry, it keeps on evolving. You will quite save a lot of sleeping time, if you learn to ask. :)

These, however, are my own experience when I switched job. People have different ways on learning and coping things. I just want to share it and hoping it helps.

2

Your first and foremost task is to reduce the number of hours you work. No person can perform for 16 hours each day. This will wear you down and lead to burn out.

I dont know what kind of person your supervisor is, but I recommend talking to them. Maybe even take some time off to regenerate.

Now, to address your want to learn proper programming. There are some ways you can go about it and ultimately it will depend on you which one you'd like to take.

1. Go back to university

This is certainly the official way to learn more about programming, but will cost a significant chunk of time and, depending on where you are located, money. You can become a full-time student or perhaps look for some part-time bachelors.

You could also look for remote learning degrees. The University of Florida, for example, has an online Bachelor of Computer Science degree. There are more universities that offer something along these lines.

2. Boot camp

You could go to a bootcamp like App Academy. They tend to take significantly less time to complete, but are usually very intense and dont cover too much of the science part in computer science.

3. Self study

You mentioned that you tried some tutorials already, but gave up because they were aimed at complete beginners. I dont propose just following some YouTube tutorials, but rather a set path of classes and books that will give you a deep understanding of how computers work and make you a better programmer.

For this case I would recommend you the Open Source Society University. Its certainly not a formal degree, but the curriculum they created has been modeled to contain high quality courses and content that cover a 4 year bachelors of computer science degree. This option certainly allows you to skip some sections if you are familiar with them.


To become really good at programming, I believe you need the fundamental knowledge of how computers work. The bootcamp and some online tutorials won't teach you this. If your primary aim is to become a good programmer, the bootcamp will more than suffice. If, however, you want to become a proper engineer, you should consider the other two options.


What you ultimately decide on is up to you. They all come with their upsides and downsides.

1

"Well ... albeit without a formal college diploma, you're here!!"

However – you obviously now find yourself in a dysfunctional employment situation. (Which just happens to be fairly typical. Ahem ...)

Therefore, I now suggest that you ought not consider this to be anything related to your "credentials" (or lack thereof). With or without a college degree, you are managing to fulfill your employer's expectations ... but you now obviously find yourself ill-used.

Therefore, I simply recommend that you should take your concerns as-stated to your immediate supervisor. Buy him-or-her a nice cup of coffee and "just have a talk." Be prepared to listen.

1

IMHO,

LinkedIn learning or Pluralsight snippets can get you up to speed with specific tech you missing

The only other option is formal education that doesn`t much help when you have 10+ years under your belt

1

I work as an on-the-job trainer for software developers and have formal non-university education in both software development (and my primary language) as well as training and mentoring, and I currently work in the HR sector. My advise for you is as follows.

First, ask yourself what you're really struggling with. To do that, let's begin by looking at your situation.

  • You've worked various coding jobs in different fields over time, and with different technologies
  • Some of these included in-house coding (and maybe IT person)
  • The current on is scientific
  • You're clearly interested in technology
  • You have at least one of the three virtues of a programmer: impatience

So you have a versatile background, and you're interested. That's pretty good. Given the degree you went for, you might likely also have a decent interest in and understanding of how business works and what's good for a company. That's a very valuable and rare skill to have in tech in my opinion.

Next, let's talk about the nature of your current position. I am going to make some naive assumptions. They're probably not all true, and the order doesn't matter.

  1. You work in a research company, so that's very different from working in a start-up:
    • typically in academia code quality isn't as important
    • maintaining a product isn't as important
    • results are important
  2. You might be working with different technology than you did before.
  3. You might be running a lot of analyses.
  4. There might not be many people there to learn tech stuff from.
  5. The domain knowledge is likely much more important than the coding knowledge.

I would like to focus on point 5. You've said a lot about learning more programming, but is it really that? Would they have hired you if you didn't know how to write code? Could it be that the issues you're facing are more around the algorithms you need to write into code?

I can't answer that for you as you've not told us what exactly the nature of your work is. But the fact that online tutorials (probably for the language you're using) are boring and too slow for you tells me you are struggling with the subject matter. The solution to that can be addressed by asking the people who tell you what to code for help.

There's no shame in not knowing the domain well. Every developer always needs to do that. In most companies, that's why there are business analysts and product managers and all kinds of experts. Your job is to be the expert in translating what they know into code. It's OK to ask them to help you understand their area of expertise. That's their job.

You clearly didn't need the formal education in tech to land this job. In fact, most companies require formal education for career starters because they have nothing else tangible to measure your skills on. But what you learn in, say, a comp-sci degree is often not at all related to a developer job. I'm from Germany, and most software developers there don't go to university, but do practical on-the-job training instead. Personally I firmly believe that a uni degree is not required to be a good developer.

Then there's the unhealthy work environment. Does everyone work these extremely long hours, or is it just you? If you were faster understanding the problems you have to solve, would you still need to work that long? Are you happy with the company and the team, apart from that you feel you're struggling?

Again only you can answer these questions. You've reached out here, so you are aware something isn't right. Think more about what is.

Finally, if you want to get more experience in coding, having someone to help is essential. Normally there would be someone more senior at work to help you. If there is not, I suggest you find someone outside. If you have friends who work in tech and are more senior, ask them to review some of the things you've done. Don't go exposing your entire work product, or sending pieces of work code to people, but show them code, explain to them what you were trying to do, and take their feedback.

There's the Code Review Stack Exchange as well, which can be really useful if you're unsure about things. Again, don't post full work product there. You probably don't hold the rights on the code, and stuff posted to SE is automatically licensed in a different way. Rewrite some of it to be more generic, for example. That's a good exercise in itself.

There might be local meetups (or now online at the moment) of developer communities for either coding in general, or your specific technology, like your language (this is mine), your database product, Linux or similar. There are also groups for mentoring beginners, sometimes with a background of minorities in STEM (like codebar), or for women(like Rails Girls or ngGirls). Don't be afraid to go to them even if you're well into your career. Most people are eager to help, friendly and welcoming.

If that's not enough, you might want to look at online services where you can buy mentor hours with professionals. A quick Google search has given me https://www.codementor.io/, which I've not used and am not affiliated with.

2
  • 1
    It's like you looked into my soul. I want to thank you sincerely for taking the time to write such an excellent answer. Your assumptions are correct. I am the senior coder -- somehow -- and I feel unqualified. And, no, I am the only employee who spends this kind of effort. Everyone else is putting in like 2-3 hours max, especially during the shutdown. – Ryan Ward Jul 2 '20 at 15:32
  • @RyanWard you're very welcome. I get how frustrating this must be. But let me tell you this: imposter syndrome is normal. Every person in tech has it. I've had it in every new job, and every time I get a new trainee I wonderd if this was a good idea. – simbabque Jul 3 '20 at 8:29
1

A LOT of people are in exactly your situation, I am one. I even worked in a bioinformatics research facility once as a SW engineer (my educational background is physics).

I think it would help you to get to know others who have the "formal" computer science knowledge which you think you're lacking. You'll find that these people don't necessarily have it easier at work. You'll find that even people who have degrees in computer science aren't necessarily more talented or more productive at work. Why? because work is so much more than just applying computer science topics. Your history suggests broad experience and it would help you to leverage that to your advantage.

If you're dealing with a lack of knowledge in something, there's nothing stopping you from taking a class or two, or if you have the right work environment, organizing a workshop with others in your workplace to help each other get trained in a topic. If you can, finding a mentor is perhaps the most valuable thing you can do. All these things are very different from just "tutorials" because you're communicating with actual people. There's something about "showing up", having discussions, and being accountable for showing your work that is much more effective for learning than passive online tutorials.

So, no, starting from square 1 isn't a good use of your time unless you really feel compelled to dive into a master degree program-- it probably won't make your work easier.

0

Disclaimer: I am a developer with ~5 years experience as a software engineer. This is from experience.

You do not need a formal education in Software Engineering or Computer Science to be a programmer. In fact, having one is often detrimental. My Computer Science degree is from the University of Waterloo in Canada, which is one of the top-rated technical schools in the world (and definitely one of the top in Canada), or at least that's what they like to tell us, and I will tell you straight up, employment-wise, my diploma is not worth the paper it's printed on, nevermind the $40K-ish I spent to get it. In school, they basically teach you nothing useful on-the-job. So don't think that because you don't have fancy letters after your name that tell people how good you are at Software Engineering (you have other fancy letters but not those ones) that you are deficient in some way.

100% of my knowledge of software development in a production sense has come from on the job training, just like yours. Most of what I know has come from reading the same tutorials you're reading, the same guides you're reading, and trying things myself, same as you. That's just how it is in Software Engineering. Having read code written by others, most code that gets written, unfortunately, is written "just to make it work" and for no other reason, much the same way as you are doing it.

So, like it or not, you already are a software engineer. You don't need formal training or fancy paper or what have you to prove that to yourself. So let's get that straight.

Now, the problem of working late or long hours because you can't get something to work: That's not normal. The problem here is, either you don't know how to estimate tasks properly and you're allowing yourself to take deadlines that are too tight, or you believe that what you're doing is easier than it actually is and you're hating yourself for not being "smart enough" in your own mind. Both of these are bad. So, what you need to do is, stop working those long hours. When you get an assignment, tell the person giving you the assignment: "I know how to do X, I don't know how to do Y. It will take me some time to learn Y, and so I need Z time to complete this assignment", where Z is probably about 20% more time than you actually think you need realistically. That's how you estimate a task. Then you'll be able to complete your task without working 16-hour days and not sleeping and without also making your boss angry; you told them how long it will take, and you completed it in the time you said you would. Don't fall into the trap of trying to make your boss thing you are a "rockstar" or whatever by finishing every assignment in 2 days but hurting yourself to do it; lots of people do that and it's not good.

As for, what do you do when your boss says "that's not good enough, you need to work faster"? Tell him to jump in a lake. Seriously. That is the hallmark of a toxic work environment, when your boss makes you do things that are unethical, where you have to hurt yourself or someone else to make deadlines, and your boss is aware of it and says to do it anyway. What you do is, when your boss makes such a demand, you say "yes sir, ok sir" and then immediately update your LinkedIn profile to "actively searching" and start taking interviews to get out of there. Because that's not normal and it's not "part of being a good engineer" or whatever. You are most important, not your job, and any good company knows that.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .