If I can code doesn’t mean I know how to do X thing on your stupid phone
Programming
Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!
Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.
Hope you enjoy the instance!
Rules
Rules
- Follow the programming.dev instance rules
- Keep content related to programming in some way
- If you're posting long videos try to add in some form of tldr for those who don't want to watch videos
Wormhole
Follow the wormhole through a path of communities [email protected]
It's not magic
That a "working" prototype with no tests is just as good as a carefully-designed and well-tested feature. I see this happen so often that a coder puts a prototype in front of a product manager or exec and they are like, "this is exactly what we need, now! Ship that!" And then misery ensues for all of the engineers that need to maintain this piece of garbage. As managers pressure the engineers to build new features on top, they inevitably break fundamental parts of it, and without a confident leader to demand that tech debt is paid off, that product will consume the souls of many desperate coders.
In contrast, if you do it right the first time, there will be significant parts of code that never need to change, and the parts that do need to change will be much easier, because it will be obvious if it breaks the tests.
feature
Please, we ship whole projects without any automated testing whatsoever then we spend month fixing the mess. The company I work for is smort
That sounds super familiar :D
Anyway, a prototype is not a bad thing, if the managers know the difference. It's easier said than done to "do it right the first time" if you don't know how / what to build. Prototypes can be built to validate hypotheses and generally figure out what works, then build the real thing afterwards.
Yea I should have clarified. Prototypes are a great idea. The problem occurs when you say, "this is good enough we can improve on it as we go." Yea good luck balancing priorities when everything breaks from tapping your keyboard too hard. You MUST NOT MERGE the prototype.
Myth: code can be ugly as long as it works, don't spend company time on making it look good or on minor optimizations.
The truth is that you can tell when effort has been put into a job. Even if it just works, the lack of discipline means that in the end it will be difficult to maintain and probably will fail in unexpected situations.
Every language has its conventions, but if I spot more than a line of separation between blocks of code, that is a common telltale sign of noob. Run from that shit.
That “just changing a word” is easy and quick. A codebase is an iceberg. Management only really typically understands the surface, but there is a disproportionate amount of ice under the water.
I had to change all instances of a label from a word to an abbreviation. Because we don’t have i18n set up in the app, it ended up affecting 55 different files. I did my best to consolidate into everything calling a common function, but it’s far from perfect. 55 files changed because management said “oh this word here should be shorter”.
Myth: software engineers replicate value similar to a factory worker making the same item over and over
Truth: software engineers are closer to artists than factory workers IMO. We find and create new value, not replicate existing value
I feel this. But, in a lot of jobs you have someone forcing you to do art the way they had envisioned lol
And just like artists, the vast majority aren't very good at it.
Yes but unlike artists we have far fewer sugar daddies.
eh, more like self-important plumbers
Just making some corkscrew pipes because the existing architecture is corkscrew piping.
Technical Leads are not rational beings and lots of software is developed from an emotional stand point.
Engineering is trade offs, every technical decision you make has a pro/con.
What you should do is write out the core requirements/constraints.Then you weigh the choices to select the option that best meets it.
What actually happens is someone really likes X framework, Y programming language or Z methodology and so decides the solution and then looks for reasons to justify it.
Currently the obvious tell is if they pitch Rust. I am not saying Rust is bad, but you'll notice they will extoll the memory safety or performance and forget about the actual requirements of the project.
I know they make a joke about Tom in office space being the one who brings the specs from the customers to the engineers - as much as it looks like he's dead weight, there really is a skill in being able to explore the customer's needs (and frequently manage their expectations of what the proposed software should be and do) and parse them into something more technical for the engineers, because you might not know how to program, but you've got a good idea of what the capabilities are because you communicate with the engineering team on a daily basis.
Currently the obvious tell is if they pitch Rust
I would amend that to "if they pitch any language".
The best language is almost universally "whatever we already use" or for new projects "whatever the team is most familiar with". It should occasionally be reconsidered, and definitely try out new languages, but actually switching to the new language after trying it out? That should be very very rare.
The team/organisations knowledge is a huge factor but its easy to fall into a trap where no matter what the problem is the solution is X language.
If I have an organisation that knows C# and we need to build a Web Application. I would suggest we need to learn Node.js and Typescript and not invest in a solution that turns C# into web pages.
You NEED to be good be in math to program.
Whilest for some highly specialist fields you definitly do, but for a lot of jobs things don't get more complex than calculating averages.
I don't think it's so much about the actual math, but learning good logic and problem solving skills, which math helps with.
I'd argue that you do need to be good at math to be an effective programmer, it's just that that doesn't mean what a lot of people think it means. You don't need to know all the ins and outs of quadratics, integrals, and advanced trigonometry, but I think you do need to have a really solid, gut-level understanding of basic algebra and a bit of set theory. If you're the sort of person whose head starts to swim when you see "y=3x+2", you're going to find programming difficult at best.
I don’t even know what a y=3x+2 is but I have no problem with programming, algorithms and data structures
OTOH, you need to be good at the same kinds of reasoning that leads one to be good at math. Not knowing much math isn't a problem, but not being able to learn math is probably a dealbreaker.
Nail on the head.
The reason programming curriculums are so math heavy is because of teaching logic.
You're either right or wrong in math. There is ONE answer to the formula. You can sometimes get there different ways though. The logic on your path is the key.
I'm bad at math and struggled heavily through calc 2 and barely passed with a D+ but had little issue with data structures and algorithms (except when the algorithms were written in math notation, but still got through it after being explained in a logical set of steps instead).