This is a real question and I don't literally mean "define it" but that is my title assigned to me at my current job but I don't feel like I am a software engineer. I'm in a corporation and everyone is an engineer haha. But my main thing is working with a front-end framework, I barely do any CSS stuff anymore(I was a heavy front-ender prior to this position eg. build this design from scratch). Most of our stuff is built with components that already exist. I deal with a lot of OOP/class/prototype based code which is surprising to me in JS eg. it's not about the language rather implementation.
But yeah, I do not really consider myself a software engineer, more "developer/coder". To me software engineer is like writing code in .NET or something. C++ you know, that's "real" engineering. JavaScript seems like "easy" granted I'm not using Typescript/GraphQL up to snuff with the modern stuff(other than using React).
Our process is strict I mean, you have to write a TDD(Technical Design Document), get that approved by other engineers. Write unit tests, those have to pass on top of the existing tests, code gets reviewed/approved before merging. Then you do automated visual testing "graybox" which is Mocha/Selenium in our case. This is really cool(I always wanted this/tried with Slimer/Phantom). This process "is engineering" to me. Where you have to come up with a solution and go through a heavily structured/reviewed process(good god JIRAs man, JIRAs in my nightmares).
I don't have a CS degree so that's another reason I don't think I'm an engineer. I don't have the algorithms though I took some initial classes(I tried to get into CS before I failed out of school from Phys/Eng). Like logic/discrete that was hard, logic proofs were hard. After intro to quantum mechanics(which I promptly dropped after a couple classes getting scared of Eigen values) I just felt like I was bad at math, got past Calc III/DiffEQ which I know in most of our jobs(code) isn't even relevant. I just assume/tell myself ML/AI is not for me because of the math.
Another concerning thing is being bad at certain things like state management or writing recursive code. I think "my brain sucks/is not good at this". I had this one unfortunate thing to deal with where a nested button in a card also clicked the card. And each events were supposed to be separate/not related, so I had to figure out how to write a debouncer or some way to manage/stop the unwanted click from going through... and this was a component-level problem eg. it would have had to have been fixed/gone through a whole process of coding/testing/reviewing. Which would then propagate into other builds/assemblies using this basic card component. There were event emitters/stop propagation but they weren't working in this case and I can't just override stuff without approval eg. change the click behavior on the card component itself. The issue was odd/rare because the component's original purpose was flexed. Anyway... my code was bad. I mean it will probably get pointed out once people see how it works. It works but I know it's bad. It's just hard... like keeping track of states(I don't mean redux) but you know, I draw it on a board over and over and I am trying to figure out ways to make it simpler/make sense. That's the kind of stuff I'm like "damn it's bad that this doesn't just click immediately".
Anyway I guess the main thing that assures me/makes me believe that I'm some sort of engineer "for real" is that I get paid money hahaha... I don't get fired at my jobs so I guess I have value. Sorry this is just going on and my first post here too, especially after deciding to avoid/give up social media. But I think this place is great because it's technically oriented/learning ability. And this will probably be the last time I post something like this. Generally will do a better job of researching vs. just asking for an answer.
Thanks to anyone who actually reads this, I know it's a wall of text and just rambling.
Top comments (9)
This thought is completely natural. I have it and plenty of others I have worked with admitted that they have the same tendency. I went to school for EE and transitioned into software and got the mysterious ‘Software Engineer’ title and I find myself complaining that I’m not doing ‘real’ software engineering, While doing the same languages you mentioned (C, C++, C#) you believed were more engineering-centric languages. As engineers, we just get bored with repetitive problems and romanticize things that are unknown.
That is interesting that you have that feeling with your background/what you use.
I guess then "what is real engineering" maybe working on the AI that drives Tesla cars. That seems very serious. Not something you can just undo eg. accident.
The repetitive problems thing I"m recognizing more and more/where it makes sense to have a solution to stop doing it again and again.
It means I spend 60% of my time implanting tools and frameworks, 30% of my time complaining about them, and 10% of my time missing the old days of just HTML, CSS, and JS.
Love you #svelte
Yeah I've heard of svelte(and like a year ago or so Reason ML).
That is concerning to me the rapid innovation of new languages. Although arguable "JavaScript is JavaScript". I think I saw a snippet of Typescript before and I was like "what is that?" Possible the author was doing some short hand notation or something but it seemed visually foreign to me.
So TypeScript has a lot of benefits. The biggest thing with TypeScript is that it is a super set of JavaScript. They try to adhere to the future specs of JavaScript, while also adding optional strict typing and some additional things like templates and enums.
It can make it weird to look at. But you can pick and choose which new features you want to use pretty easily.
For a start, trying running regular JavaScript code through the TypeScript compiler. It does a good job at pointing out logic flaws and potentially unsafe code.
Svelte is really nice, because it is a compiler not a framework. So you work in a component fashion, which developers have really adopted. But then, you can work in something that looks like plain JavaScript, html, and css with a few new features. And it saves a lot of time, and produce a very fast and lightweight frontend.
The thing with Typescript too and I guess it depends where I am but I don't really see much demand for it. It seems like "an ideal case" for most companies like using GraphQL over regular REST.
I don't think I'm at the point yet where I can say what code is optimal/best other than time to run.
I am vaguely aware of Svelte so I'll have to read up on that. Thanks for the info.
Interesting thoughts. I am aware of some of the "Big O" stuff 'linear, logarithmic.." although I have not experienced these kind of questions like you're describing myself. Maybe because I'm not in a "silicon-valley" type area or the positions I've applied to, they weren't looking for heavy algorithm work.
Hopefully you're in a good spot now.
Thanks for the thoughts. I believe that/see that about breaking things down into steps. Helps to make more sense/have concrete things to address.
Sounds like a lot of school(years).
I think in some places you legally can't just call yourself an engineer without an actual degree and that's what I mean. "You're legit" with the degree and I don't mean that as education isn't good. Education covers a lot from basics to super-deep complex stuff you probably wouldn't even be aware of. But to me without that piece of paper I'm not legit but sorry don't mean to continue on with that.
I also see that about implementation vs. technology. I'm also getting better at just getting over things(ego?) eg. take some existing thing and implement that/get it over with to achieve the end goal.
I gotta work on that, scatter brain "cowboy coding"
Ahh I'm losing coherence ha. Thanks for your time.