Well, here’s the thing: the exact example you used in the podcast is what I’m dealing with. Writing an app in Python and getting it to run on a server. Maybe a container is exactly what I need.
If you’re willing to:
- Skip learning about the deep internals of how the container works
- Follow instructions where you don’t have any idea what some of the steps actually do
- Accept possibly low performance (due to something deep that you skipped learning about)
- Not worry about having an extremely robust “production” solution
Then this is an excellent route! A lot of the details won’t actually matter unless you’re doing something performance-intensive, secure, or highly reliable.
Last year I went through a Docker tutorial and had a fully-functioning Java service running in a re-usable container in a couple days. But I compromised on all of the above.
So far I have a poor performance, insecure and highly unreliable website. Security I have no interest in improving, but I don’t see using a container as improving the others, so maybe it isn’t good for me.
You don’t care about the security until your web server starts mining cryptocurrency for someone else and costs you real money.
If you want to code your own web site, you either have to become a professional or pay a professional. Paying a professional doesn’t mean paying an individual human being. It could just mean paying for a service like Heroku, AWS Lambda, Nanobox, Google App Engine, etc. All of these provide infrastructure abstraction layers for could/web applications. You build your app in a certain way so that it runs on their platform, and now you don’t need to learn any systems administration or anything. You just have to learn the specific things their platform demands. They document them well because they want your money.
I’ll admit that in 2018 I wouldn’t even consider deploying my own code on the public Internet directly.
I’m not trying, it’s already done. I’ve been running this on my shared hosting server for about 5 years now:
No instructions to do anything ever expect someone to be able to write 6,000 lines of code, learn object oriented programming, work with databases, another 8,000 lines of code to populate and update the database, create all the logic behind an entire sports ranking system… and not already know all the magic words needed to know all the magic words to find out the magic words to do the thing that only takes one magic word that was in a step-by-step tutorial I did on the FIRST DAY of deploying it to the server.
People who are down with the dock - does this sound like a reasonable setup?
PC is windows (for games/daily driving), with a full Linux VM (for dev), with docker installed in the VM (to e.g. make sure production environment matches dev).
I would suggest using the Windows subsystem for Linux instead of a VM.
Also, if you are using Docker, you can also just run Docker for Windows, which I think not-so-secretly runs a VM anyways.
Linux as your primary OS (even ignoring the gaming side of things) feels like rubbing two sticks together when there are matches available. The results will be fire either way but Linux really makes you work for it.
That’s only the case if you are trying to do normal every day pleb shit.
if you are trying to say, develop some software, then suddenly Windows and OSX are the sticks and *NIX is the swiss army chainsaw.
Write some java in windows: Download the JDK and JRE from from java, Get an editor with a compile button, fiddle with environment variables, write some code.
Write some java in *nix: Download java, Write java.
Luke, congratulations on writing something and shipping it! That’s not trivial, and 5 years running is nothing to scott at.
You haven’t done much Java development on Windows, have you?
The Java dev experience isn’t all that different on Windows than on *nix.
It’s what I did 3 out of 4 years of my CS degree in. Never touched it since college though. I’m pretty sure I was fair, though, download the JDK and JRE. Get an editor and you’re off to the races. Unless something doesn’t work first try then it’s usually environment variables. Least that was my experience in like 2011.
If anything I’ve done significantly less java dev in *nix than in windows.
Java is the exception. It was made on purpose to be the same everywhere. Its environment setup is mostly isolated from the OS. Compared to every other language where you are linking with some C libraries and shit.
Yes, that has been my experience. I used Windows and Linux interchangeably when I was heavy in Java development/design.
In my experience learning, teaching, and working with code, I have come up against a certain techbro mentality that
a. revels in ego-boosting obscurity:
“PFF booleans? I don’t use bool in C to be compatible with …”
b. equates ease of use with learning less:
“Using Spring Boot means you don’t learn ANYTHING about how Spring works…”
c. Fails to recognize that a “simple” question may not seem simple to a newcomer who still figuring out how it all works.
“Learn how to use the search bar. That question has been asked and answered a thousand times here on Stack Overflow…”
d. Insists their design decisions are superior despite having zero professional experience or training with design patterns or systems/graphic/interface/experience design.
*I completely ignored the existing code infrastructure of the application, duplicated functionality in a completely incompatible way, and built this part BETTER."
e. Either assume significant knowledge, or lack of knowledge of their audience.
So yeah, that’s a lot of fuck yous. A middle ground would be nice, but that requires empathy, patience, and work. Learning in this atmosphere without mentors, or access to dedicated educators is tough. And some technically knowledgeable people have a conflict of interest, competitively and egotistically, via maintaining the obscurity & smart-people-only gate-keeping. I track SO contributors who are particularly helpful, knowledgeable, succinct, and thorough in their explanations, but IMO the site is pretty poorly designed for its intended purpose. Granted, asking/expecting people to educate you for free is a fool’s road.
But sometimes you don’t know what you need, until you spend forever struggling with the wrong thing. And that’s when you break out the matches.
I hate this response. Because if you’re coming in from only a decent handle on the tech and terminology, you might ask the question the wrong way and that response is just more gatekeeping if they don’t link to the “right” way to ask the question.
I’m very happy to now work in an environment where all of the developers are extremely helpful to one another. The culture is one of “elevate those around you.” New non-senior hires are basically apprentices and assisted as such.
Now, senior hires are expected to be productive day zero. But they’re recruited differently.