880 karma · joined July 22, 2010
* http://buckybits.blogspot.com/
I'd disagree. Technology is a tool like any other; it may destroy you, but that's anecdotal. It is not a requirement that it destroy people or take them away from what they find important.
In other words, keep on keeping on. "A couple of hours" of focused work is actually fairly productive, more productive than most people get. It's like writing: do a little bit every day, pretty much no matter what, and it'll get done by accident.
Say I have a project that has Java and Rhino (JavaScript) files. My IDE/editor is configured for Java with TAB==4, JavaScript TAB==2. Everything looks great in my editor, because it knows things.
Now I'm using `less` or `cat` in my shell. Or ssh-ing to a remote box because of an emergency production issue. Or whatever. Now when I look at the file things no longer line up as originally intended, because when I view them outside of the (relatively) smarter IDE the TAB characters are at the mercy of whatever I am using to view the file.
You cannot simply rely on local tab width settings if files use a mix of tabs and spaces for indentation and alignment: if you change the tab width then alignment breaks. If you never align anything, great, tabs work great for indentation (except for when you can't trivially change it, then they suck). But indentation isn't the only thing tabs are used for.
There's the rub: TAB characters will always be at the mercy of how I'm viewing the file, which I do not always have control over, and certainly not (trivially) based on the type of the file.
I believe good testing skills generally boil down to good coding skills: good code is (almost) always easier to test.
Be specific: what testing skills do you think you're lacking?
I view code in multiple ways, have different indentations for different languages (not many different now), and have clients that enforce difference indentation settings. It just doesn't work.
The only reliable mechanism is spaces-only.
:p
It might increase QoL for some employees in some ways, but that wouldn't necessarily improve the quality of the company.
Definitely something I'll be looking at for my embedded work; it may fill a gap in my toolchain. And boo-hiss tabs.
When you throw Flutter into the mix the discussion turns more to ecosystem than language: I personally thing Flutter is a great idea and may end up winning the cross-platform war, although I'm still learning React Native because I already know React--and the apps I'm writing don't need much or any native support not already provided by existing modules.
In the long run something like Flutter will almost certainly win because performance matters; it's just not clear to me if Flutter will be the one.
I dispute your premise from the outset.
* FreeRTOS is a good place to start, but there are many, both OS and commercial. Most are similar in scope and application. Larger systems may also use Linux or Android, but that's further away from what you're looking for.
* Atmel, Arm, PIC, ESP8266/ESP32 are probably the strongest current players. Procs like the Cortex M series are popular on the Arm side, Atmels are what the non-Arm-based Arduinos run, and the ESPs exploded on to the scene as a dirt-cheap way to get WiFi.
* shrug Arduinos, ESPs, and RPis. There are a million other boards like the Tiny series. Adafruit has the Feather series which I like quite a bit, and the Circuit Express which is an interesting proposition, but has a Python layer, which you may or may not want. Note that almost all of these boards can be developed for in different ways: the Arduino "IDE", command-line Arduino or bare-metal, JavaScript, etc.
* That you'd just have to search for--the embedded landscape is huge because almost everything has a processor in it now at some level. If it's a company that makes a physical product that does anything other than sit there, there's a processor in it. (More or less.)
I have to admit I'm not quite sure why you don't already know that, considering our history is similar, which makes me suspect the question was just poorly-expressed.
Any software you write on any system that's already running a mainstream OS will have multiple layers of abstraction by default. Add anything web-related to that, particularly on the client, and you have another dense layer of abstractions, because browsers are just VMs.
The only way to escape that is to work on small (here, by small, I mean bare-metal or small RTOS systems) in a non-VM language. (I add the last because many small systems are now running JS or Python, e.g., NodeMCU/CircuitPython/etc. and as soon as you get in to that, while you're still quite close to the machine, there's a fairly opaque layer unless you decide to dive in.)
It is the nature of systems to increase in complexity. In many ways this makes our lives easier, at the expense of being able to understand each layer individually. It's only when we cross layer boundaries, by design or by accident, that we need to understand more deeply.
* No mentoring from more experienced developers * Refactoring (techniques and reason) isn't a course * No real-world, e.g., practical, exercises (depends on school)
CS classes teach the basics, and theory. These are both important. They tend to fall over on teaching practical applications of both.
Most development takes place far outside the realm of "theory". I haven't implemented my own data structures since a decade out of college (in those days I still did because I did a lot of embedded work, and there wasn't much of an internet). Only rarely do I need to consider time complexity (although I do).
This is just my experience; I did embedded/firmware for a decade, then web development. For the first half of that I used math more than CS. For the past twenty years nothing I've done even existed when I was in college.
The solution? Continue to teach the basics and theory: IMO you must have a strong background. But mix it in with real-world applications, with code reviews, with revisions, etc.
The best example of this we had back in my day was the final senior project, but even that had no code review or critique.