New job has no way of coding locally?
old.reddit.com
old.reddit.com
In my current company, I spent some time maintaining a docker-compose file just to ensure we have a reproducible infrastructure and all of it should work with a single command.
I firmly believe that ease of development has a major impact on the overall quality of the product.
I'm (annoyingly) regularly preaching to my team the value of quick turnarounds on pull request reviews and manual testing, so the team completes their changes with as much feedback as possible while their heads are still in the same space. Apparently pair programming is the ultimate form of this, but I've never tried it.
I've practiced pair programming in two companies, and I really love it. For me working with a colleague massively improve my focus when I'm the one coding, and while not being the one coding I was really happy yo be able to give instant feedbacks instead of waiting PR time (I've done it once with another senior Dev, and the second time with a junior, and pair programming with a junior is probably the most efficient way of working with a junior I've ever encountered).
There's small drawback though: it's mentally draining, and you shouldn't expect to work as many hours as when you're solo, at least not for a long period.
"But of COURSE you should edit this system DLL to make a bog-simple content management system function . ."
No, no, really I shouldn't. The hell planet you from?
"It's INDUSTRY STANDARD!"[1]
Oh for the love of Christ, not this again. Go sit in the corner with the other fifty-seven "industry standards".
[1] I'm going to blow a gasket the next time someone gives me this without a numbered citation or CDRL item.
I almost asked if you’re that friend. The difference is that with what he was working on, it was a beloved money maker that was implausible to materially change because of recertification costs.
The last I heard, they were buying second-hand IDE licenses on eBay because the IDE package had been EOL’d ~10-15 years prior.
It was actually glorious. It was very easy for devops to roll out upgrades and fixes to the VM fleet, and anyone could SSH into your VM to help diagnose weirdness. Not to mention you could just give people a link to your VM hostname in order for them to test out your development branch in their browser.
I left some years ago, so I'm not sure if that's how it still works there.
At google it has been kinda similar to what you describe for the most part. You got a beefy (depending on your situation, you could end up lucky and snag a powerful 256GB RAM one with bajillion cores) cloud machine into which you SSH or use VSCode Remote with (or the google in-browser code editor running Monaco aka same engine as VSCode that is compatible with most usual VSCode extensions). I was apprehensive at first, but the convenience of “it just werks” is difficult to beat, especially when all of it is integrated well and is the default way of doing things.
With that, it takes me less than an hour to go from a brand new machine to building my code and running it like usual (just gotta set the dotfiles for the terminal emulator and the shell + some .zshrc tweaks). No code ever lives locally, so it takes a lot of pressure off. The only downside is being screwed with no internet access, but it has not been an issue so far in my years working there.
If i left my laptop at home or something happened to it? No problem, grabbed a loaner laptop, logged in, set it up in under an hour, and it works just as good for the basic work tasks regardless of whether it is macOS or chromeOS or Linux. The whole pain of setting up the environment is straight up gone, and it lets the devs use whichever desktop environment they prefer (as the cloud machines run a flavor of linux anyway, and your laptop OS becomes entirely a personal preference).
You can't code when offline. But I generally find it difficult to code without internet access these days anyway, and the scenarios without internet access are now vanishingly small. Internet access whilst flying, is becoming standard, and only likely to improve.
The advantages are numerous. Firstly, the ability to work from even the most basic machine, anywhere with internet, is liberating. I can be perfectly productive with only my tablet whilst travelling.
Secondly, keeping a consistent and controlled environment that you never have to maintain or worry about breaking due to a system update, or move to new hardware.
If you use multiple devices(e.g. Desktop, Laptop, Tablet), or perhaps have personal and business machines, not having to repeat a setup and update process is extremely convenient. As is not having to worry about your hardware - I can code from any machine capable of running a text-editor, SSH and a web-browser.
The key thing here is the development flow needs to be extremely convenient for the developer - no frustrating processes interrupting your code-debug loops.
But when it's executed with convenience in mind, I've found it superior in every case, and in a future filled with ubiquitous internet, I wouldn't be surprised if this becomes the norm.
Local or bust.
Given the shitty Orwellian potential of technology though, I wouldn't be surprised we end up steaming OSes from cloud on mobile dumb terminals. But that's shitty.
I've been doing this for years with my tablet. The tablet honestly becomes 'less dumb' in the process though.
I agree some stuff moves towards this Orwellian centralisation of power - I use Geforce Now for games + Amazon Workspaces for work.
But I've also run VNC on servers I own myself for side-projects- you can own the dumb client and smart server if you need to.
We then had other scripts that would take the "generic" code and change the namespaces/prefixes for upload into QA or prod environments. It was quite painful.
1. RDP to the consultancy's HQ.
2. From within that environment RDP to the client's machines.
All via VPN, going across the Atlantic at one point. You can't have a metting because every 10 minutes or so some part of this chain breaks and you have to reconnect.
Needless to say it's not easy to get anything done this way, so the project is already delayed and losing money.
The hilarious part is that his rate is now somewhat higher than mine, but I would have to be in a precarious financial situation to join that project(in reaction to this situation management... started looking into expanding the team).
1. Enter a Windows VM on our native Linux Laptop to use the Citrix client
2. Use the Citrix client to access customer's terminal server
3. Use RDP to access a special Windows laptop
4. Enter a Linux VM on the Windows laptop
Coming back from lunch I have to enter credentials four separate times to unlock everything.
Anyway, this meant we got a really, uh, interesting collection of customer support requests -- and, more important, architectures. My favorite is what I decided to dub "the InterNAT."
The InterNAT involved a VPC subnet which had its routing rules configured to route all traffic via an EC2 NAT instance (these were the days before NAT gateway). All well and good... except that this VPC also had a VPN configured, which routed their traffic to an EC2 instance in a VPC in another of their accounts. That EC2 instance then routed the connections out of a NAT instance in its own VPC, before eventually connections reached the Internet.
What's especially interesting about this is that EC2's network stack is designed to detect and mitigate tromboning[0], but by creating this particular architecture, they had unwittingly managed to bypass those protections. So, not only were they routing through multiple NAT instances across multiple VPCs just to reach the Internet, but they were managing to route outside of the EC2 network fabric in the process, substantially increasing network latency.
Coda: Our bathrooms in the support office in Seattle had stark white walls in the stalls, which actually worked okay as whiteboards. People would doodle while taking a shit. So, of course, I diagrammed the InterNAT in a stall a few days after discovering it. Probably two years later, I saw a picture of it pop up in my Facebook feed, and had to cop to having drawn it.
Bonus: My second-favorite story (albeit much shorter) was the curious case of SSL onloading. You may have heard of SSL offloading -- using a reverse proxy or load balancer to handle SSL termination, rather than doing it on-host, in order to save resources on your actual webservers. Well, I had a customer -- also in the (in)famous GovCloud queue -- who had decided to implement the reverse. Plaintext HTTP into the load balancer, but HTTPS into the webserver. I guess this is trying to protect against the case where the call is coming from inside the house?
0. https://www.catonetworks.com/blog/the-sound-of-the-trombone/
The security concerns always miss the tradeoff: the productivity of your entire dev team now has a SPOF. When I’ve worked with “cloud dev machines,” they’re great until the cloud environment dies. Then you basically have to send your devs home for the day because there is literally nothing they can do. At least I can fix my local dev machine and not impact others when it breaks.
Not to mention time spent working in embedded, where your code only runs on the other side of a serial->USB adapter...
There's always going to be some grumpy old man in the corner who like things to stay the way they are, but many colleague will definitively appreciate you making they lives easier, and if you're good at it, then it's an easy productivity sell to management (unless management is completely fubar as well).
Sadly it is the way at least parts of the industry is moving. You either get to work on remote VMs, in a container hell or live in production. The whole container stack gave a large number of businesses a way out of the limits VMs put on them, but now developers have mini-Kubernetes clusters running on their laptops and they either developer directly in containers or constantly rebuild. For some things there's just no way around it, you need the infrastructure to test your work, but for some everything just starts in a container.
I partly blame complex build systems, bad package managers and poor coding practices that locks you to extremely specific versions of libraries or other software packages.
I may or may not have dependencies in a development environment that I call over the network, but the thing I’m looking to change is running on my machine.
No more session/SFTP expiry.
It was some kind of big data processing, probably called that because the entire database doesn't fit in a single floppy disk. So for some reason, they had to use an overly complex distributed architecture. Absolutely terrible, it took tens of minutes to get a result because was a queued job and the queue was filled with other jobs that were so poorly optimized that they took hours instead of seconds. I don't really blame the authors of these jobs since there is no profiling of any kind so you can't optimize properly, you don't even know how long your job actually took to run because it may be stuck waiting for a resource and it still counts as runtime.
In the end, they were essentially SQL queries that any decent database (ex: Postgres) could support, and our biggest tables where in the order of a few GB, which would be absolutely no trouble for them.
For dev that went beyond your typical JOIN query, I ended up getting the open source software the framework was built on, downloaded the data as csv files, and tried my stuff locally, and when I was done, copy-pasted the result in the editor. I also made a few tools using the REST API to work around some front-end problems.
The most "fun" part was when my manager went to explain me what I had to do. He imported the data into Excel, and in a few minutes of Excel magic, he did everything, just to show me. It took me 3 days to implement it in the framework. In other words, my manager was 100x more productive with Excel than I was with the framework, and I was rather "efficient" among my coworkers. My manager was really good with Excel, but still...
I think I got a glimpse of how it felt to work with punch cards.
To add a developer machine, we just push a yaml file to a git repo, which automatically spins up the virtual dev machine.
Some of the factors:
- Local dev required spinning up a number of resources, each of which needed to be regularly updated manually, while cloud dev environments had everything maintained automatically
- Much of the development involved IaC, which was easier to test in the cloud
- There was a need for collaborative development, and it was easier to do that on cloud dev environments
I currently work at a place where local dev is the norm, and it's fine. That said, it is a little funny to me that so many people think EVERY situation should be suitable for local dev. If I'm developing a sufficiently complex application or suite of applications, why should I expect everything to fit on my laptop?
There are tools like localstack out there trying to emulate Aws but when I tried it it was such a hassle to use.
YMMV of course, but it's horses for courses if you ask me.
1. You can't code locally (because of super locked down computers) and have to use a VDI
2. You can code locally (I.e. your machine has an IDE) but tests and builds happen in a dev environment, or
3. You can code and test locally, but your build process is so environment-dependent, doing so is pointless.
Even just the fact that half the app might run in a browser is jarring. Desktop dev is comfy.
I'd bet money that multiple developers have this automated and use that time to do other things instead. Relevant XKCD https://xkcd.com/303/
Guaranteed once one gains it what op describes is a walk in the park.
really real computer science, because there is No other way to really know what the code may do other than experimentally testing and reccording empirically gathered data..... /sarcasm
A way of avoiding problems or hiding new features that are currently in development is wrapping the code in... if server remote addr == my ip... do this... else do nothing. Works fine!
https://spinupwp.com/advanced-wordpress-deployments-with-bud...
If all you’re ever doing is WinSCP and editing on a production server at what point does lack of experience with Git and how software is built elsewhere become a liability in career terms because interviewing examples are hard?
To be fair, it did work. Nothing ever blew up. We had hourly backups for all the major clients. Onboarding or switching between clients had zero startup costs, its literally just FTP and php files.
Happy I left though.
Looks to me that this person is not a developer but someone who is used to copy paste random stuff from stack overflow and see the change live on the dev tools console of his browser. I don't even know how he got that job to begin with.