The real advice is try different tools rather than sticking with the first one you try or were told to use. When you find the one for you you'll know. Also remember you can make your own tools. Don't struggle with crap tools and find a way to make it easy to develop your tool kit.
And I'd learn to use the tools that were most appropriate to the environment I was working in and not spend so much time 'optimizing' my own workflow for relatively small gains in productivity.
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've used several IDEs before. I used one when Eclipse was the go-to option. Then all the attention went to IntelliJ. But none of them gave me what my Emacs+Evil setup gave me, while the Emacs side got "almost" everything they gave me.
Probably this. IDE developers listen to users and they do build in those features that make vim better than Notepad. Same with grep and anything else command line excellent. I think it is best not to think one or the other but use both. iDEs work on Linux and have a terminal window built in. So that is how to do it, vim keyboard bindings too.
Vim keyboard bindings offer nowhere near the capabilities of a real Vim. They only offer the basics and never advanced vim features. Vim is so much more then just keybindings, it is more of a text manipulation language. There is only one exception to that and that is Emacs Evil mode.
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.
I thought the same until recently and found the underlying java nonsense of an IDE to be slow, forever indexing. But due to work I had to use an IDE. Much to my surprise it was not slow. Plus I learn from it. I like the code errors showing and I like learning new things from the auto complete. I also like the plugins for database and Redis stores. Plus debugging is great. Give it a go and avoid modding down those that wish to share their experiences!
I used plenty of IDEs (from free ones up to expensive enterprise IDEs) and I still prefer Vim. In fact I started with an enterprise Visual Studio when I first started programming and only years later switched to Vim.
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.
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.
> I barely remember anything about their standard libraries.
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.
I think the problem is always in the breadth of understanding. When you read documentation you discover more than exactly what you're looking for. When you tab complete something, it just tells you all the methods in the class that start with the letters you typed.
> If an IDE can abstract that memorization away from you, what's the problem?
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 use IntelliJ for certain tasks because I don't know Java as well as I should. It certainly makes me more effective as a guy who doesn't know Java very well!
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...
Personally, I think IDEs are better for working but text editors are better for learning. If I'm using an IDE and need to call some method, I press press ctrl-space and more or less guess at which of the options is right. If I'm using a text editor and need to call some method, I go read the docs to figure out what the right method is. The latter is both slower and better for learning.
I spent a long time wrestling with trying to set up IDEs when I was learning. They were always a huge pain to set up, broke in confusing ways, and were generally far more effort than they were worth for the productivity gain (especially when I would try some other language/etc after a short period and go through it all again). Just using a text editor and the compiler was far easier to understand.
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.
Indeed, I use PyCharm as one of my IDEs. I may try CLion for embedded C/C++, but this is still restricted to ARM basically (and CLion supports CMake only, which is the least bad of the C/C++ build systems in common use, but still this is the kind of baggage that comes with an IDE which is not a problem with 'UNIX as IDE').
People are not sure what benefit is going to be provided to make up for the inferior text manipulation capabilities.
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.
I've always found basic text manipulation lacking in the GUI apps I've used. "Make this comment fit in 100 columns without losing paragraphs" "move the next line up to the end of this line" "go to line 647" "move the cursor to the beginning of this method" etc.
My knowledge dates from the "one keystroke to convert this to a JavaBean!" era, though. I'm guessing people don't do that anymore.
The default Emacs keybindings are nice, but do the semantics transfer (mark/point and associated manipulation functions), and can you write your own functions? I don't have a _ton_ of custom elisp functions for raw text manipulation, but the ones I have written are useful and I wouldn't just give those up for no reason.
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.).
The semantics are pretty good with the IDE I use most often, IntelliJ (for instance you definitely do have marks, there is a sensible kill-ring-like functionality for M-y, etc.). Writing a custom function is harder (I think you've got to write an extension, basically), but there are a lot of other useful things you can customize (making up your own templates, for instance). Also, the deeper understanding the IDE has of your code compared to Emacs lets it make many more useful suggestions for issues and potential refactors.
Every IDE or text editor I have ever used had very limited text manipulation and navigation capabilities.
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?
These kind of Vim emulators are not really providing the full vim experience. Some come close (like Emacs Evil Mode), but most just don't. Most are just scratching the surface of stock vim.
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).
I was always more of an Emacs guy so I can't speak to that specifically, but in your big list of examples there's nothing that wouldn't work, as far as I can tell.
I can't get the features of VIM in an IDE. I CAN get IDE features in VIM.
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.
I run Emacs, in GUI mode. If the language tool have a debugger and/or an interpreter, there is the IDE. In the rare case that there is not a ready made comint implementation for a language, it's easy to do. Completion, well M-/ is good enough. If I don't know a function's name, I need to read the manual to find it and to learn what it does anyways. If I need snippets, it's easy to define them, even without an Emacs minor mode for snippets. Every part of the system is extensible, every keybinding redefinable, and almost every functionality composable. And almost any programming language with more than ten users has an Emacs major mode already made for it. If I really want semantic completion or on-the-fly error reporting and linting (I don't use these out of preference), it's dead simple to integrate and enable.
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.
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.
I'm mostly an IntelliJ (and variants: RubyMine, Webstorm, Rider, PhpStorm, etc.) user, although I also use Visual Studio. In my experience, Emacs plugins for many languages often have a feel of working more on looking for matching words in the code rather than "understanding" what the code is doing, let alone suggesting good refactors.
IntelliJ's linters are indeed unusually rich on the deepness and complexity of their rules. But not on the universality, the reason that I consider them unusable, since I just don't like to turn rules off.
Anyway, that's a feature of their linters. It just happens to be packaged with their IDE, but it's a completely different tool.
In practice the great linters and refactoring tools are kind of a package and it's nice to have them integrated (there's the "I") into your development environment. I find the IntelliJ emulation of Emacs key bindings good enough for me.
I don't think they need to be mutually exclusive. I use both daily. I don't use vim emulation in anything else and the context switching hasn't tripped me up in a long time, it was a bit of a problem at some point though.
i've used a mix of ides and text editors over the years but i've committed entirely to emacs for the last 6 or 7. the value of having a tool that i can adapt to my needs and use anywhere for anything greatly outweighs any capricious ide conveniences.
I don't code anymore (I'm more of a pointy-haired lower boss)...but what i wish i could go back in time and change around this is to have focused - I mean really, really focused - on 2 or 3 different programming languages only. Instead, what I've done over the years - again, when I coded as a dayjob - was to go shallow on far too many different languages (and ecosystems). I don't think it was me just chasing the "new thing" for the popularity of it. I genuinely was curious about, and wanted to learn "the new thing". The problem - as is often the case with tech - is that there's just too many "new things" coming out all the time...and one just can't keep up. So, sure, i feel like somewhat a jack-of-all-trades (and all my employers have benefited from it), but in more ways than i would like, i lack the depth - and possibly enjoyment/fulfillment - of being really awesome at one or very few things. That old adage about picking one (or a very, very few) thing(s) is no joke; and i see its wisdom only now (after working for 22 years professionally). If i could travel back in time (relative to programming), I'd tell my younger self 3 things:
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.
Because the early complacency of working for someone else doesn't get a chance to set in. Also, because if things don't work out with some initiative, you can bounce back from a setback much easier/quicker.
I disagree somewhat strongly with your point #1, or at least I have a different framing for it. Don't bother focusing on depth in a very small number of programming languages or technology stacks. There isn't enough depth there to make that worthwhile. Programming languages are fundamentally similar with very few different paradigms, all of which can be learned and then applied appropriately to new languages. You can learn the more interesting or fiddly bits of any specific language you're working in as needed.
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 have generally always learned from books. Today's increased use of videos helps with high level explanations, but video can't keep up with changes as quickly as text can.
videos where I can watch the developer coding are the best for my style of learning. really sticks seeing it executed rather than showing some powerpoint slides of high level diagrams and code snippets.
I prefer a combination of videos and books. It doesn't seem realistic with how content is packaged and delivered that one or the other entirely can work on their own.
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.
I dont really agree with do not go to bootcamp advice. I think that structured supervised learning it can be very useful for those who are starting from very little knowledge. Knowing what is worth cloning/learning and what exactly to do with that clone or what exactly to learn is half the struggle for those who dont know much but have aptitude. Moreover, deadlines add motivation and prevent freeze from the thing not being perfect enough yet. Some bootcamps seemed to really push people to learn maximum during short time, so if it is not too expensive (money matters) then it might be really effective way to start.
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.
If I had to do it again? Avoid going down the operations path. Not because the knowledge wasn't valuable, but I always enjoyed working on bigger programming projects more than tinkering with other people's big programming projects (Linux, Ansible, AWS, Cisco, etc). Having operations on my resume, however, pigeon-holed me into a particular role professionally.
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.
I learned to program on my own then studied EE and hard sciences in school. Figured I already knew everything about programming. Hubris of my youth. I'd have taken more CS courses in college.
The number one thing I see in my students (I teach Scala, usually to already experienced developers) is they don't actively engage with the material. Write notes, or code up short examples, or draw pictures, or whatever works for you to actively think about what is being taught. This corresponds to "Write down what you learn" and "Build shitty stuff that works" in the linked article.
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.
> they don't actively engage with the material. Write notes, or code up short examples, or draw pictures,
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...
It varies. Several years ago it was lectures interspersed with exercises. Now we know a lot more about pedagogy we use many tricks: we live code, we get students to vote on questions, we have them work in teams and teach each other, etc. Live coding is a good time to code along.
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!)
I've always hated team work in uni as a humanities student. And I'm not even an introvert type. It's always childish and boring, and makes me detach from the class, if not the entire lesson itself. If it's team work, please make it sth. substantial that inherently requires teamwork.
I wouldn't. I'd learn a trade. Not to be facetious, I'm serious. I love programming. I never played video games, I spent my free time learning basic and then assembler in the late 80's. At the time, I was custom cabinet maker. I eventually become allergic to the 'smell' in oak, causing health problems. I had to give it up. I was busy 8 hours a day. I made decent money. Theirs a certain satisfaction at the end of the day and being able to point at something physical and say 'A good days work'. I began contract programming and eventually into full time employment.
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.
> 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.
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.
The dirtier secret is that if you turn something you dislike into a career, you won't get even the small consolation of liking it, and all the other problems will not go away.
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.
The grass is always greener. I grew up in a working class neighborhood where the majority of my friends parents and high school friends later became involved in trades. My high school had a trades program for mechanics, HVAC, electricians, plumbing, and a beauty school.
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.
Just for a point of reference, I've been a Cabinet Maker, Welder, Powder Coater, Skid nailer, punch press operator and more. Believe me, I understand blue collar. I was in my 30's before I worked professionally as a programmer.
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.
> They can work practically anywhere and make the same amount of money
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.
You view of trades work is romanticized. The labor is grueling for 90% of the bodies on any given site. Some days you can sit in your truck and play on your phone for 8-20 hours until you get sent back to the roach motel with 2-3 other guys to come back in 8-12 hours to do it again. Other days it's 100F, and you're standing on asphalt or concrete all day boiling in your sweat rushing through a month of labor in a couple weeks to meet the deadline. You're only rushing after two weeks of sitting on your hands because the paperwork got messed up and that precisely ordered $10k of sheeting, or brick, or wire isn't the right color so the entire plan needs to be recertified. The culture is toxic. The labor will break your body and if you don't get addicted to heroin to make it through your day you're probably an alcoholic and are probably a smoker. The guys who are making 100k+ are site engineers, masters on jobs they're there to fix, or are honestly overpaid. Most masters I know are 60-90k and would love to have a job cushy enough to sit around and complain about on the internet during the work day.
84 comments
[ 0.21 ms ] story [ 145 ms ] threadI 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
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?
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?
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"?
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 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...
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 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.
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.).
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?
[1]: https://unix.stackexchange.com/a/57708
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).
I don't use java though, so maybe that would be different if I where using Java.
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.
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.
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.
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.
(I tried a couple of times switching to Eclipse but was too frustrated so quickly got back to Vim)
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.
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.
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.
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.
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!)
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 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.
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.