IT/Software career thread: Invert binary trees for dollars.

Lendarios

Trump's Staff
<Gold Donor>
19,360
-17,424
Just do a simple calculator in a von newmann machine.
There all the assembly language you'll ever need.
That is an actual CS course objective.

Jesus division was hard.
 

Fartbox

Trakanon Raider
58
72
The reason I promote at least working with assembly prior to higher level languages is like hanging a picture on the wall in a house:

You watch a video on YouTube and they take a hammer and drive it part way into the wall, then throw the picture up. You go to Home Depot and they sell you on a sledgehammer because you're a big guy and it can do everything a small hammer can do, just better. You go home and use it and bust a big hole in your drywall, but can't hang your picture.

So you roll back to Home Depot and get a framing hammer this time, just like the video. This time you get home and put the nail in successfully. When you hang your picture (keep in mind this is one of those big, naked lady murals), it rips down your drywall and your picture falls down.

So you watch some more videos and find out you need a couple nails for a bigger picture and should probably put them in the stud. Now you're on AskJeeves typing in "how to find studs in my house" and you get back some pics of naked guys. Once you're done jacking off, you turn on the safe results filter and it tells you Home Depot has what you need. So you roll back to Home Depot and buy a stud finder. Next thing you know, you're back home pounding in some more nails this time. You pound in one more and one of the nails starts leaking because you hit a water pipe in your wall.

And this process continues....now assembly and hanging a picture don't correlate well at all. In the case of assembly, it's more about eliminating the questions that will inevitably come up if you start with a high-level language. And the questions are still going to come up regardless of learning some assembly first. But, the goal is to hopefully eliminate some of them and give a better understanding of computers and how you go from JavaScript to something actually running on the processor. Going back to the extreme house example, if the person had a general idea of house wall structure, they probably could have avoided some of those pitfalls.

I'm not advocating beginners stick with assembly long, more just getting an introduction to have some general understanding of how the computer works by example.
 

Deathwing

<Bronze Donator>
16,428
7,439
I have a degree in computer engineering, so I have decent knowledge of Assembly and the related computer architecture. That said, I've been programming in Python for the last 5 years and I can't remember one time where Assembly has explicitly helped me.

Understanding what a garbage collector is doing behind the scenes and what memory management means even though Python tries its hardest to take that away from you...those have definitely been helpful.
 

Hachima

Molten Core Raider
884
638
I think learning assembly is great, I just think like maybe that's something you do on the side once to see how stuff works. Unless assembly is your goal, then by all means

Yeah it would definitely be great as part of a 4 year degree or if that was your goal, otherwise I'd even say it would be harmful to learn for a new person going into full stack development. It's hard to learn good principles found in books like 'The Clean Coder' if you are learning assembly. Instead you end up with people that are comfortable with a single method that's thousands of lines long.
 

Voyce

Shit Lord Supreme
<Donor>
7,179
23,494
I think learning assembly is great, I just think like maybe that's something you do on the side once to see how stuff works. Unless assembly is your goal, then by all means

yea, learning Assembly is fine if,

A. You plan on doing Assembly in your job role.

B. You've already cracked into development and you want to go all the way down the rabbit hole.

I wouldn't recommend it to someone who just wants to get into development for the first time unless they are in category A.

Totally useful, instruction sets are never going away and knowing what a Compiler compiles down to more or less depending on the language would nearly fully demistify coding in its entirety, but its too overwhelming and too specific to focus on for job entry. It would make no more sense then learning JCL; very useful for understanding how programs are allocated disk space, and allotted run time in TSO...but completely irrelevant when developing on a normal mordern kernel that figures that out for you.
 
  • 1Like
Reactions: 1 user

Control

Ahn'Qiraj Raider
2,270
5,763
And this process continues....
So your analogy is that learning assembly in order to web dev is like learning to build a house in order to hang a picture...
Ok, so that sounds like a reasonable analogy to me.
The unreasonable part is using this as an argument for learning assembly.
 
  • 2Quality Calories
Reactions: 1 users

Vinen

God is dead
2,783
490
So your analogy is that learning assembly in order to web dev is like learning to build a house in order to hang a picture...
Ok, so that sounds like a reasonable analogy to me.
The unreasonable part is using this as an argument for learning assembly.

I'd say its more like learning how to formulate concrete or engineered wood.
 
  • 2Worf
Reactions: 1 users

Fartbox

Trakanon Raider
58
72
So your analogy is that learning assembly in order to web dev is like learning to build a house in order to hang a picture...
Ok, so that sounds like a reasonable analogy to me.
The unreasonable part is using this as an argument for learning assembly.

The rest of the paragraph you started to quote explains the argument. I can try to rephrase if it's not clear to you. Additionally, it's just one approach to learning programming, some people find it useful, others don't. To each their own.
 

Neranja

<Bronze Donator>
2,605
4,143
Sure. But why assembly?

I write assembly for work, I have a computer engineering degree and I agree with it's importance. But I don't understand why we would suggest someone trying to break into the field via coding camps should spend significant time on it.
Okay, here is a half-rant, which includes a bit of trolling, but as an exercise for the reader you need to decide yourself where I am trolling or not. Good Luck!

I said to learn it as a second language to learn how the machine down there looks at your code and works through it. Pointers and memory layout of data structures and how algorithms are working with them are one of the biggest hurdles in really understanding programming, and also one of the things where programmers regularly fuck up. The C++ guys are trying to solve this with smart pointers (which brings the problem of ownership), while other languages like Java are trying their hardest to abstract the whole concept away with the addition of a garbage collector.

We are living in a time where the hard physical limits are restricting further improvements in single core processing power. While the most modern processes are working their way to 7nm the wall is in sight. To illustrate the point: a stretch of 10nm is basically around 26 atoms of silicon. Leakage is a real fucking problem now.

So to really improve performance you need more cores, and with that comes parallel programming. In the near future you won't be able to throw more money at the problem in order to buy the newest hardware to make it go faster, you have to think about algorithms and data structures and how to parallelize your workload.

In the context of "coding camps" and breaking into the field it is at first useless, but the hard truth is that those coding camps are next to useless for your programming education, too. Sure, they teach you concepts and the language to express them in--but real programming can only be learned through programming, and the pain you feel while banging your head on your desk because your program is not working while you learn how to use your debugger. You have to put in the work. Which is true for any creative field. The 10.000 hours to mastery rule is mostly bullshit, as it is how you use the the time and the quality of your mind state. But you have to put in the work, no way around it.

"Full stack developer" is another one of those things that will most likely go away in the future, because basically you are making yourself in a "jack of all trades, master of none". Things will get more and more complicated with ubiquitous computing, and you won't be able to keep up with the latest languages and frameworks and techniques and silver bullets to be competitive. And a team of offshore people in a country where their combined monthly salary is cheaper than your rent is not doing you a favor.

On the other hand we are cruising to the next dotcom bust, when the people with money realize that the latest hype in things like Uber is basically "taxis, but with the internet" and basically an exploitation of the low income segments of your population who will fuck your company up when they realize they can retaliate. Also, the AI and deep learning stuff is mostly smoke, mirrors, and cheap offshore people doing the actual work. Then we have things like "big data":

Where was I with my rant? Ah, if you really want to learn how to program and not to "code" you have to learn on two fronts: On the one hand you have an actual problem you are trying to solve, for which you are writing the code. On the other hand you are working with the theoretical foundation and the math to look how to structure your problem, the data and which algorithms to use, and how to measure the complexity and runtime for your algorithms. The latter part is mostly called discrete mathematics.

Here's the hard truth: If you are "coding" and doing "full stack" you will be working on the first part, where you are googling and looking on stack overflow for solutions on what classes to use in the framework you are currently using and which methods to call for your current problem. But so can everyone else. You are a replaceable cog in the machine that can be off shored to cheaper countries. But the most interesting and fulfilling job is that of a programmer, where you are working on the latter part. But this one is full of theory and math, and also more frustrating more prone to banging your head on the wall, but in the end also more fulfilling. Also, you can change your class to things like "software architect" later.


Also: SCRUM is basically socialism/communism for programming. Change my mind!
Whenever a SCRUM project had problems, didn't really work out or even failed the excuse is always "what you used wasn't real SCRUM!". Just like the Soviet Union wasn't real communism. So the solution is always that you need to buy more into the ideology and hire a SCRUM master, and then everything will be alright. Also you need to purge the nonbelievers.
 

alavaz

Trakanon Raider
2,001
713
We understand what you are saying, but if a dude wants to get a job as a driver, do you tell him to learn how to be a mechanic in addition to driving or just to focus on driving for awhile?
 
  • 1Like
Reactions: 1 user

Lendarios

Trump's Staff
<Gold Donor>
19,360
-17,424
You can be a perfectly capable developer without knowing assembly.

It is like a hipster thing.

90 % of us are just creating reports and improving business functions and doing lot of mundane stuff.

MusicForFish MusicForFish Have you heard of salesforce?

Look into if it is your cup of tea, they have a great learning platform, and since it is relatively new you aren't going to be 5 years behind everyone.

Trailhead | The fun way to learn
 
  • 1Like
Reactions: 1 user

Neranja

<Bronze Donator>
2,605
4,143
I'm not disagreeing with anything you said but you barely touched on my issue with assembly
Because it formats your brain and thought processes when you know what happens under the hood.

For a practical example: Do you know how to play guitar? At which point did you stop being conscious about which finger goes where when you put them on the fretboard for a chord? The process of your hand putting the fingers down itself still plays out, just in your subconsciousness. This is what they usually call "muscle memory": but your muscles have no actual memory, it's still the brain controlling it, you just don't actively think about it, like when you brush your teeth you don't think about every move of your hand.

And that is the scary part: 99% of your day you are stuck in your subconsciousness and don't really make rational decisions, you are stuck in your habits.
 

alavaz

Trakanon Raider
2,001
713
Because it formats your brain and thought processes when you know what happens under the hood.

For a practical example: Do you know how to play guitar? At which point did you stop being conscious about which finger goes where when you put them on the fretboard for a chord? The process of your hand putting the fingers down itself still plays out, just in your subconsciousness. This is what they usually call "muscle memory": but your muscles have no actual memory, it's still the brain controlling it, you just don't actively think about it, like when you brush your teeth you don't think about every move of your hand.

And that is the scary part: 99% of your day you are stuck in your subconsciousness and don't really make rational decisions, you are stuck in your habits.

Nah, I can't see a guy going for a job writing javascript needing to "format his brain" for assembly to be better at his job. It's probably even detrimental. You want him to learn how to sweep pick his guitar so that he can get a job playing basic chords. If he wants to learn both, great, just think I'd personally suggest sticking to the chords until he feels he has the skill and capacity to try something else.
 

Lendarios

Trump's Staff
<Gold Donor>
19,360
-17,424
Pro tip.

Everytime you compare learning assembly with any other non computing process or analogy, you lose the argument even more.
Example
In the big orchestra of software languages, most of us just play the triangle and go bing
.. bing...
 

alavaz

Trakanon Raider
2,001
713
Reigning it back in a little bit, figure out the direction you want to go and strive to take it as far as you can. If at some point you think learning assembly (or any other language) furthers your goal, then by all means do it.