What I would do differently if I was learning to program again
reddit.com
reddit.com
Flash forward about 30 years. I'm still writing code professionally. I rarely write code for just enjoyment anymore. Those carpenters, cabinet makers, plumbers, electricians.. .trades people, make the same or more than I do. Their unionized. They can work practically anywhere and make the same amount of money. Not just in major cities. It doesn't see many radical shifts in technologies, unlike programming that is a life long learning because of advancing tech. Its VERY likely you will find your skill set obsolete without a real concerted effort of constantly upgrading. I wont even get into the culture which IMO is fostered by those writing the cheques and even your peers. Nor the moral issues that you will inevitably face - something few programmers ever talk about. It's a real kick in the happiness meter when something you write is designed solely to put many people out of work.
My opinion, my real opinion, is that if you find yourself writing code 'for fun' even if you don't know what your doing, pursue it. If your only in it for the career. Turn and run like hell. You'll be burnt out in 5 years and starting over.
The vast majority are NOT making six figures. The work is hard, has long hours, and is physically exhausting. My grandpa was a welder/machine shop owner my uncle is a electrician. They would trade anything for a cushy desk job with great pay, great benefits and easy workload. I've never worked past 4pm and have ample paid vacation time. They will never be able to say that. Google says that here in Austin TX, the average master plumber makes $25 an hr. HVAC is the highest at $44 an hour on average. And we are going through a construction boom, also don't forget that you have to factor working in 100 degree heat and 50% humidity 5 months out of the year.
Sure you can start a business and eventually have 5 workers and 3 trucks like my grandpa but then you become a entrepreneur and have to deal with the whole billing, scheduling, selling, headaches of running a small business.
I find a lot of tech people idolize the blue collar fields. It's damn hard work.
I currently live in a town that is resource based, mining and forestry. The epitome of blue-collar. Believe me, those guys make double what I do with bonuses and benefits. Even without, they make significantly more than I do. It isn't uncommon for a worker in this town to be able to retire by 45. They work until they are offered early retirement, or, have their pensions bought out. All this with very little education beyond 'common-core' in the mining sector. Ya, they bust their asses. But they're paid for it. So, ya, you raise valid points, but I'll stick with my first hand experience. Have you ever worked blue-collar or just second had info as you present.
You are contradicting yourself by saying you’re in a boom town and also they can move anywhere. (Can they move to Thailand? I can move to Thailand as a programmer). In a mine in Australia you can make 6 figures standing at a gate and letting trucks through, or higher to drive the truck, but it’s specific.
I think their mobility would definitely be worse that a programmers.
> I'll stick with my first hand experience. Have you ever worked blue-collar or just second had info as you present.
I don’t think anecdotes are a good example here. Something like https://data.gov.au/dataset/taxation-statistics-2013-14/reso... would be better.
The dirty secret of turning your hobby into a career is that there exists a very real chance you will kill your hobby and passion for the craft.
Unfortunately, one can only deal with some much half-assed code and coworkers before turning into a cynic who hates the craft. I almost wish I was just in it for the money, for this reason.
There's a continuum between "turning a like into career" and "turning a dislike into career" wherein I think there's probably a good balance. Indifference, much like ignorance, seems to be bliss among many folks in my line of work. Especially when you've got someone passionate to pick up the slack.
I seriously dramatically slowed down my advancement as a programmer because I didn’t use a full featured ide straight up.
Now I only use vi to edit files in /etc
Is it a Unix tough guy thing where there’s nothing that a GUI app does that you can’t do better in a terminal? Or is it that you’ve never really spent a lot of time in a professional ide so when you argue against it, it’s cause you don’t know?
I learned Python much better because I did not use an IDE.
I've written Java and C# using IDEs. I barely remember anything about their standard libraries. Python, in comparison, I know like the back of my hand. Thanks to writing Python in vim, I had to reference the docs, and eventually memorized them. Like vim itself, it made for a steeper learning curve, but the productivity gains in the decade after have been well worth it. I've since done the same thing with Go.
And that's not even mentioning that vim is an IDE - it's an extensible C IDE. Building with go-to-line errors? Yup. View definition? Yup. Syntax highlighting? Yup. The only thing it's missing is having the debugger built into it.
In the end, vim has the best features of an IDE without the bloat. It makes you use your brain when writing new code while giving you the ability to navigate your existing code with ease.
If an IDE can abstract that memorization away from you, what's the problem? The benefit I provide as a software developer is to solve business problems and provide value to the people that use my product. Knowing the optional third parameter to a string method I use once a month off the top of my head really doesn't help me with that as long as looking it up isn't slowing me down.
It's more knowing what's available (do I have to use a 3rd party library for X task), and being able to fill in the parameters (as well as having those parameters ready) before the IDE prompts me for it.
Sure, pulling up the documentation isn't a huge chore in an IDE, but if I'm not prepared to give the third parameter a calculated length, I then have to go back and write more code before I can move forward.
It's also "how do metaclasses work" and "what types am I dealing with" and "how will this type be coerced in this situation" and "is monkey patching appropriate for testing this method".
Ultimately, it's about having sharp tools. My brain is a tool, and the more complete the picture of how a problem fits a programming language is, the more efficient I'll be at coming up with a working solution.
I've only ever written C# using an IDE but I know plenty of things about the standard library. Why wouldn't I? I've written a bunch.
I remember tab completion being a big thing. When I was a new programmer, I really wanted that stuff, for sure. But as I see it now, I find the cases where I don't remember the name of the function I want to call rarer, instead wondering about the undocumented things like "is this method thread-safe?", "who owns the memory for this result object?", "what happens when the connection times out?", "does the error message this function returns contain the name of the file it couldn't open, or do I have to add it myself?" and so on, and the only way to find out is to open the source code of the library I'm using and to read it.
Like maybe IDE tooling has evolved to the point where it's just one keystroke to get the right answers to those questions, but I kind of doubt it. So if you want to demean people for not using an IDE, you need to sell it a little better and tell us what we're missing. If it's just tab completion and a shitty build system like IDEs were 10 years ago... not interested but thanks. If there is something that's actually helpful though, would consider.
The only exceptions are VIM and Emacs (and editors that follow that spirit, like Neovim).
Vim especially has an entire language of text manipulation and navigation features. This language is made up of actions (like c for change or d for delete), Motions (like hjkl for left, up, down, right respectively) and Repetitions. These elements can be combined into very powerful commands, especially since there are a lot of Actions and Motions that can be performed. This is made possible by the Modal Editing[1] that Vim provides. You would simply type these commands in "Normal Mode" and then you would be dropped into "Insert Mode" if necessary.
At first this might seem very silly or inefficient, but after a while it becomes almost second nature and is more efficient then using the mouse or pressing Arrow Keys 100 times. Especially if combined with the Macro capabilities and the Search Commands.
Some examples of this language:
Navigate 10 lines up: 10k
Navigate 10 lines down: 10j
Go to the beginning of the next Method: ]m
Change the word under the cursor: cw
Change the paragraph under the Cursor: cip
Change the inside of "" pair under the Cursor: ci"
Change a pair of "" after the Cursor: ca"
Change the inside of {} pair under the Cursor: ci{
Visually select the text from the cursor until the 3rd occurrence of the character x going to the left without selecting the x: v3Tx
Same thing, but going right: v3tx
Same thing, but going to the right and selecting the x: v3fx
Same thing, but change instead of visual select: c3Tx
Same thing, but do a rot13 "encryption" after selecting: v3Txg?
I don't use java though, so maybe that would be different if I where using Java.
Not even the vim experience when using plugins, just stock vim.
I tried ideaVim and while I do not remember what my specific problems where, you can read their ReadMe for a glimpse that they have a lot of issues still.
Even IF they would provide a decent enough vim emulation, why use something emulated when I can have all the IDE features in Vim itself.
Also: Vim plugins that provide IDE features are purposefully build with the way vim works. Providing advanced IDE functionality in a Modal Editing environment. This can not be said about an IDE with vim emulation. As far as I can see they implement those features as ":action <actionName>" which is so much worse then what vim can do.
IntelliJ + IdeaVim is simply a worse Text editor then Vim despite being significantly more bloated and slower and I would even say that Vim with plugins is a much better IDE as well (while STILL being less bloated and faster).
My knowledge dates from the "one keystroke to convert this to a JavaBean!" era, though. I'm guessing people don't do that anymore.
There are also a lot of dumb keybindings in Emacs that should not be copied by anyone (looking at you, C-u - 1 M-z X to delete all characters backwards to the first X.).
I still find some aspects of modern IDEs a pain, especially the fact that they either want to be your build system (and are generally crap at that) or lock you into a specific build system. Likewise I haven't found one IDE which can handle the variety of languages I use, so I need to learn 3, even if they all do basically the same thing.
I have some hope with the trend towards 'language servers' and also 'build-system servers' (though ATM cmake and Qtcreator are the only example I know of the latter), that this will change and you will be free to choose your combination of build system, development environment, and language with ease.
I get syntax highlighting, Automatic Checks, Navigation based on Language structures. I even can integrate my shell and debuggers into VIM, but I don't use do that. I use those usually just as a stand alone tool.
VIM and Emacs also have the absolute best git integration I have ever seen. Magit for emacs and Fugitive for Vim are absolutely fantastic. Certainly beats any IDE I have ever used.
I can't think of anything that I would like to have from any IDE.
MY vim is a much better tool for me then any of the IDEs that I have used in the last 10 Years. I started out with IDEs, because that is what my teachers and mentors used, but once I learned vim the IDEs just seem painfully slow and limited.
It is also not the case that I just don't know better. I certainly have used many IDEs in the past. For example I used Visual Studio (Not "VS Code", the proper enterprise VS) for 2 Years.
1 - Autocomplete and automatic code, those are the main benefit. Turns out that if your computer can write code for you there is something wrong with either your language or your code. Code generation is a bad replacement for code abstraction.
2 - On the fly error checking. Turns out that vi and emacs do that too.
3 - Coherent access to compiling and debugging tools. As long as you want to use the IDE tools and nothing better, at the price of loss of productivity every time you must reconfigure it, or share an environment with anybody.
4 - In place documentation. Again, vi and emacs do that just fine too.
If you are using a language that requires an IDE (that's a big language flaw, but most people don't get to choose), and wants to use a very standard and non-extensible toolset, go ahead and get that IDE. But the people disagreeing with you, it's not they that don't know something.
It marks the failures found by the CLI compilers and linters, exactly like any "good IDE" out there. What IDE are you referring to?
Anyway, that's a feature of their linters. It just happens to be packaged with their IDE, but it's a completely different tool.
Not only, but I can use the same thing to read my mail, maintain my agenda and create and edit documents.
With an IDE, I need another IDE for every language I use. Then I still need a text editor for editing text anyways. Each editor has it's unique method of customisation, and its conventions, its own keybindings, its own behaviour &c, and its own way to store customisations, which are hard to version control, if possible. And substantial customisation that requires custom code is either impossible or very hard to do.
Emacs is an IDE for Emacs Lisp. But it's so naturally extensible that it's become an application platform, basically. If all you do for all your career is to write in one language or two, then go with an IDE, I guess. But I'm glad I can use the same program to edit Perl, Python, Ruby, any sort of text, HTML, C, Assembly, Ada, Cobol, JavaScript, CoffeScript, Clojure, ClojureScript, Java, Kotlin, Scala, Haskel, and so on; and do way more with it than editing source code.
I traditionally used vi for C coding (mostly for embedded systems in parallel with assembly, and then later on Vaxxen, and then Sun machines, and later Linux and embedded systems again). Part of the effect was "time-in-tool", but I certainly know C a lot better than I will every know Java.
I guess I would posit that I find the IDE invaluable to get up-and-going with a new language (and complex ecosystem of packages), I find out that I plateau out (learning-wise) at a lower level.
IF Java didn't have so much boiler-plate (esp. on Android), I'd probably have tossed it by now. But it does, so I haven't. I'm probably getting old and lazy and accepting my degraded knowledge set as a necessary cost...
Right now, you can experience ide-level autocompletion and type-checking in vim if you are working with typescript and have typescript-vim plugin.
Just do one decent sized software with typescript+vim. Even intellij ides seem like bloated and inefficient software after that.
PS: gvim is fine too. Easier copy to, and paste from clipboard.
The other way around is much more likely: Vim plugins offer all those IDE features and integrate them seamless into vim and its way of manipulating text.
Honestly, after learning and modifying vim for myself I found IDEs to be limited, bloated and slow.
Which IDE do you use now? I am willing to give it a try, but most likely I already have.
Vim can be configured to show code errors (by integrating linters, static code analysis or "just" by integrating the compiler, or doing all 3).
Vim can also be configured to do auto complete. Actually I have not found a IDE that can provide Python (which I use a lot) autocomplete better or up to the standard that vim has and I have not found a IDE that can provide autocomplete for so many different languages.
Database work and debugging is something I mostly just use specialized tools for and don't have a need to integrate that into my text editor. Sure it was nice to just click and have a break point on that line like I did in Visual Studio, but that isn't something I miss.
Also: What do you mean by "modding down"?
The phrase "wasting time with Vim" was the thing that made me reply the way I did. Learning Vim properly has helped me every single step of my way.
So not actually disagreeing with me, just stirring?
(I tried a couple of times switching to Eclipse but was too frustrated so quickly got back to Vim)
Looking back at it, I regret not investing in quality books rather than some online subscription.
I'm not sure where the idea of powerpoints came from. Well written books generally read like videos. Books have the added benefit that it's easier to jump around and drill down right to what you are looking for, something that's generally harder to hop around on the timeline of a video.
Still, Videos are excellent to watch for many things.
Updating videos though is tough, and it can cause videos to not be as up to date and indepth.
1) Focus on depth of a couple of things, and never mind breadth.
2) As soon as possible - either before graduating college, or right after, etc. - work for yourself and not The Man. whether going into business as a solopreneur, or partnering with a few people - doesn't matter. Mistakes will be made, but you will feel more in control of any/all outcomes - good or bad.
3) Be generous for experiences, but be a cheap bastard when buying actual/material "things". Save shit tons of money.
Why do you think that would an appropriate moment to do so ?
But depth of domain might be worthwhile. That is: "I work on distributed data storage systems", or "I work on data analysis systems in the energy industry", or "I work on self-driving sensor data analysis", etc. Maybe I'm wrong about this, it's certainly not the way I've done things, but it is the kind of deep expertise that I'm often envious of.
I was able to come up with realistic own projects only after learning in sort of similar way - through structured organizations and from friends advice. Not everyone has friend advice. And having actual task someone will check adds motivation to finish it - finishing those own assigned projects that you are pretty positive are no useful to anyone is demotivating.
Bike shedding IDE or editors is a game everyone can play (use Spacemacs) but as long as the tools don't get in the way it's not very important at the start.
Do you lecture? I'm an intense scribbler of notes during lectures, but I don't (wouldn't) code up examples during a lecture, because it would get in the way of my listening.
I guess I'm asking: what is your knowledge delivery system format? "Actively engaged" will take different forms depending on the delivery system...
I agree that what actively engaged means will differ depending on student and context.
If I had to work with a pair or a team, as an introvert, I would find myself subtly withdrawing from active participation. I like live-coding, and I like active-listening (the latter is absorbing, hoping to understand and the former is testing/verifying/correcting/practicing your understanding, but I like absorbing or total-immersion personal practice. Group exercises get in the way of that (for me - again - I'm probably weird).
So, (and I'm thinking about this as I type), I think that I am active, but in my own particular ways. Because I grew up in odd remote/rural circumstances, maybe these habits were habituated because I did not get socialized with normal folk well until my mid-to-late- teens. But, maybe it's genetic? I notice one of my two sons has the same tendencies, and he's lived in an urban/public environment his whole life.
What I'm pondering is (beyond the scope of your Scala classes), is whether there are ways to actively engage multiple "types" of people? I'm not just talking about what they call "visual learners" vs "audio learners" (which has largely been debunked?), but ... IDK. I'm trying to assemble a platform for programs that get people to/through their GED, as various states put work requirements on government benefit recipients, and a major hiring block is simply not having a high-school degree. I'd like to make everything as warm and fuzzy and low-friction for everyone as I can - but I don't know how - because (obviously) not everyone is me! :-)
The group work falls under the general rubric of "active learning". It's more structured and shorter (20 mins maybe) than the kind of project I was exposed to at school and University (which might have been 6 weeks long, for example.)
I can't comment on your particular situation, as I don't know enough context, but in general there is an incredible amount of research on effective teaching methods. I've only started to get into the field in the last few years and I'm far from an expert. Nonetheless, some suggestions: there will be a lot of topic specific research you should probably look at. In addition there is general research on pedagogy. A good starting point is probably https://visible-learning.org/hattie-ranking-influences-effec... This shows: different teaching techniques can have huge effects on outcomes, and there are a lot of different effective techniques you can incorporate. There is some nuance in the techniques so it's worth reading deeper on particular topics (and reading the dissenting opinions!)
Of course, that's not of much use for anyone else. In fact, I'd recommend getting operations experience to more programmers, if only because we always need more people. But I also understand why more people don't aim to get operations experience.