4

I graduated in ECE (Electric-computer engineering) with an emphasis in logic design and digital design. Straight out of undergrad I took an EDA (Electronic design automation) software job for a company working on a synthesis tool, because, well, I needed the money at the time (took out school loans, I don't have a family). I work in the silicon valley.

I've come to the realization that EDA is probably a dying industry and that's the problem. I'm a "software engineer" with absolutely no marketable skills. I can't really be an RTL (Register-transfer level) designer anymore. I'm not really a software engineer either, because I only know enough software to complete and develop the EDA tool. I have a poor grasp of knowledge of data structures and algorithms outside of work. I hate to say it, but I can't really grasp the high level concepts required to become a full fledged software engineer. Most of my coding is just simple arrays, basic for/nested for loops, and if statements. I've tried coding on my own for 6 months now doing algorithms, I just can't grasp the concept.

Now I'm in a rut because I'm born 20 years too late, severely underpaid compared to my peers, and most likely in a dying industry. What are my options? The only option I can see is me staying with my current company the rest of my career or try to move to one of the top 3 eda companies like cadence, synopsys, or mentor to get a little pay raise and stay there the rest of my life.

It feels as if I really screwed myself up big time. I'm just looking for advice or experience from others.

TLDR; "software engineer" in electronic design automation who has some register-transfer level and software skills but does not know what to do and needs advice

closed as off-topic by Dukeling, Jim G., gnat, Sascha, Monica Cellio Jun 3 '18 at 21:12

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions asking for advice on a specific choice, such as what job to take or what skills to learn, are difficult to answer objectively and are rarely useful for anyone else. Instead of asking which decision to make, try asking how to make the decision, or for more specific details about one element of the decision. (More information)" – Dukeling, Jim G., Monica Cellio
If this question can be reworded to fit the rules in the help center, please edit the question.

  • This isn't really the place for asking for career advice (you should probably try to find a mentor for that, who can have a more detailed discussion with you about what you can and can't and want to and don't want to do), but there are plenty software engineering jobs that don't require much more than "basic" coding. And there are jobs with only a bit of coding, or where understanding coding at a basic level would help you do the job. Then there's also the option of just giving up on programming altogether and finding another career (it's never too late for that, if that's what you want). – Dukeling Jun 3 '18 at 0:07
  • I'm not sure I really believe anyone is fundamentally incapable of grasping advanced programming concepts (at least / especially not someone who has a related background). Some just have a little further to go than others, lack the belief that they can understand it, tries too hard to understand the bigger picture instead of just accepting the little piece that's in front of them (which may include thinking things are just supposed to "click" at some point, instead of it being a slow climb) or have bad teachers. But maybe I'm wrong, I don't know. – Dukeling Jun 3 '18 at 0:23
  • 8
    You are throwing a lot of acronyms in there. Can you explain what ECE, EDA, and RTL are? I am a software engineer and I have no idea what you are talking about. – Seth R Jun 3 '18 at 2:44
  • My thoughts exactly (+1), but then we sort of prove his point, don't we? :-) – Mawg Jun 3 '18 at 7:11
  • I agree with Seth R that you should define those acronyms - I don't know what many mean. I'm guessing "ECE" is "Electrical and Computer Engineering". If that's the case, and you studied digital design, I'm not sure why you are looking for software engineering jobs. Have you considered System on a Chip design or integration jobs? Or numerical control jobs? If you want to make a transition to software engineering, have you done anything besides self-teaching? Some people do better in a more structured course content - anything from a bootcamp to online MOOC courses to a graduate degree. – Thomas Owens Jun 3 '18 at 10:02
4

Simply because you cannot do something now does not mean you won't be able to in the future. While it may seem like your college degree and current skill set will determine your skills in a few years, this is not the case.

Perhaps the nature of the skills you're trying to pick up right now are not the appropriate level you need to advance or maybe the courses/books/etc. you're using aren't suitable for your learning style.

Have some patience. Perhaps learn some other skills (leadership, management, guitar, scuba diving) then maybe go back to approaching the skills you're trying to learn today or maybe discover that your own values have changed or the market has and another path is more attractive now.

0

Sounds like a gig doing System Verilog might be a reasonable fit, and there is LOTS of verification work out there.

Software engineers tend to make poor hardware designers in general (The mindset is too different, especially once you get down to Register Transfer Level (RTL) design[1]), but every serious chip design needs huge swathes of simulation test beds writing and System Verilog seems to be the modern tool of choice. The nice thing for you is that most of that sort of code is fairly simple minded, without deep knowledge of data structures required, and the EE knowledge will be very relevant.

I doubt that Hardware Design Languages (HDLs) and their test benches are going away any time soon.

I am a fellow electronics engineer, but I went down the specialism in low noise analogue, mixed signal and high speed design where as it turns out there is work to be had due to the fact that very few schools are teaching it any more.

[1] A generalisation, but software engineers tend to think in terms of telling the chip what to do, hardware designers in terms of telling the chip what to be, it is more of a distinction then you might expect.

-1

I have a poor grasp of knowledge of data structures and algorithms outside of work. I hate to say it, but I can't really grasp the high level concepts required to become a full fledged software engineer. Most of my coding is just simple arrays, basic for/nested for loops, and if statements. I've tried coding on my own for 6 months now doing algorithms, I just can't grasp the concept.

This indeed seems to be the core issue and the answer is quite simple: doing it on your own, without a solid foundation, is a dead end. You are basically reinventing the whole industry. I'd suggest the same thing I did this year: read a good, practical book on the subject. The key point here is to avoid drowning in the theory - the mathematical intricacies of hash tables and Hamiltonian paths are a bottomless void. What you need is to 1) get the basic idea of when to use what, 2) get a similarly basic idea of where to look up the details when you need them.

The whole process, exercises included, is going to take a few months of evening/weekend practice. You will also learn the basics of a programming language of your choice since this is how you will test your solutions. As for the book itself, Cracking the Coding Interview by Gayle Laakmann McDowell worked for me. Now my solutions to coding challenges labelled 'hard' on coding challenge sites get consistent high scores.

Of course, it's not all a software engineer has to have in his toolbelt. But as data structures and algorithms go, this is it.

Not the answer you're looking for? Browse other questions tagged or ask your own question.