Very well said.
These tools help businesses move forward without having to involve a programmer for every little change.
Also there are quite a few analytically strong and talented folks out there, who do not know programming. Given the right set of tools, they can make quite an impact.
Definitely true. I’ve also seen even the most technical people benefit greatly from the artifacts produced by CI tools.
When each commit (or each RC etc) has automated regression testing for output quality, performance, or XYZ metric critical for your business, the artifacts/reports from those code changes can be stored and audited when unexpected things happen during a release crunch.
We’ve had teams that shrugged off integrating with our CI tools, then a ”final” manual quality check on their release builds’ output showed significant regressions in completeness/accuracy. They scramble all their troops to run through the merged commits to find the culprit(s), and jeopardize delivery.
A basic CI setup could have posted perf/recall/whatever stats to their PR thread for each merged change, or better yet block the merge at some threshold for regressed metrics.
I definitely had the same view initially of CI, similar to unit test suites or verbose structured logging… things I viewed as complete overkill. What I learned was that these things DO still feel like overkill until the moment you really need the ability to reliably audit how each change affects an evolving large system
> These tools help businesses move forward without having to involve a programmer for every little change.
Guess what — they will hire a programmer to do it anyway. They just can't be arsed as long as there is a warm body to boss around that will do it for them. It also strokes their egos, so why roll up the sleeves?
Same pipe dream as low code/no code tools enabling executives to create workflows on their own, which never happens in real life — it's "I had Kevin do it for me" all the time, every time, where "Kevin" is usually a programmer.
Same pipe dream as imagining everyone contributing to the in-house tools they are using and "collaborating". It just never happens. Everyone is happy to dump their feature request onto Andy who developed them in the first place and whine if the Andy is taking too long to implement them.
No amount of added eye candy and wishful thinking is going to change this. Even discovering Santa mating with Nessie is more likely.
You realize how much UX is important in CICD at the same time you realize everything outside of product/IT (and half inside IT) isn't version controlled, change managed, and/or automatically deployed.
More user friendly dev tools are the way to get people to do these things.
Scale, Complexity, Job Specialization, Organizational or Business needs blah blah.
Let me explain.
Imagine you have a team that grows from say 4 to 40 over time. All the initial programmers, business managers etc. have left. One fine day, you get a call from the client saying "The feed has not arrived today, fix it in the next 2 hours or we are going elsewhere (or can you please please please fix it ASAP) ..."
What do you do?
How do you prevent this from happening in the first place?
What procedures / software do you need to have in place to even know what went wrong etc.
Now let me give examples that these tools help you handle.
1. You need to view all the jobs that run on a daily basis across 400 of your servers.
2. You want to make sure that no changes to anything in production can happen without at least 1 more programmer and 1 more business person signing off on it.
3. A job / script fails partially, how do you assess the impact and move forward (you are not even aware of the existence of this script).
4. You have a backup script / job that needs to run on demand. You want to let your support folks run it or even the business folks, without any programmer intervention (you don't want to get a call every time someone in Japan wants to run this report).
Coming to CI/CD systems, some of their goals are
A. Codify the knowledge into scripts / configs and do not rely in tribal knowledge.
B. Ensure that your code is always in a "buildable" state with the new changes (i.e. don't even let bad code in)
C. When a build fails, notify the programmers who introduced the bug immediately
D. Once a build is complete, send it to other systems for stress testing.
...
Yeah large businesses can have very intricate and complex needs. They rely on generic and configurable software (proven and tested by other large organizations) to meet their operational needs. Also, given that you can hire people that are proficient in these tools, you can focus on the business needs rather then reinventing these tools.
My problem with Jenkins is that it very often leads to a pile of Groovy, that no one really understands and then some things can be only done through Jenkins instead of a developer's machine for example. That's also one of the reasons behind all those YAML-CI/CD configs that are trendy today, which (besides using YAML) I fully agree with. Also I hate that Jenkins pushes secrets through environmental flags.
I understand that for most companies they post a job offer with Jenkins as one of keyword requirements and they are mostly done. That is probably much more important than any actual utility of the tool beyond tens or hundreds of thousands of lines of Groovy that someone has to maintain.
Yeah, that's the answer (it's a shame it's currently so low), but I don't think it's in terms the OP will be able to relate to. I'm sure he can achieve all of those examples already.
So I'll try to refine it.
The main reason an organization uses Jenkins or Chief instead of in-house code is because they can just post job positions requiring knowledge on Jenkins or Chief, instead of minutely describing the person's tasks and training newcomers on their internal tools.
So, yeah, those tools do lots of desirable things. And slightly simplify a huge number of tasks. But the main reason one won't find a job without some experience with them is that they act a lot like competence standards on the job market.
And yeah, for a job seeker it does look a lot like they are bullshit. (And they often are - Jenkins and Chief not so much, but others are a lot.) The OP's question is a lot like "why should I learn standard calculus notation if I can calculate everything just fine on my own notation?", and if you replace that with stuff like type theory you will find people actually asking that question. The answer is always the same, it's because you need it to communicate with other people.
>it's because you need it to communicate with other people.
Yep. Chances are if they use Jenkins, they'll have some vendor plugins for tools they use. Jenkins will download xml/json from the one plugin and upload it to another. Now those systems are coupled via a format and a set of behaviors around it. For a huge portion of corporate users those plugins remove a huge chunk of work they'd have to do internally, and instead of writing something from scratch, they can extend what is already there.
Your calculus analogy has me thinking that I may just haven't encountered some pain points where being able to apply certain things that will improve my quality of work. Especially in regards of being a better communicator to be more effective team member, and employee. I also tend to work in silo'd situations.
I mean, I always encounter problems at work, just not the right ones to get me to where I want to be today.
And where I'm in a situation where I'm free to do side projects, it doesn't feel better. I can't effectively come up with new problem scenarios unless they resemble something I encountered in the past.
Isn't this one of the stable Nash equilibriums in game theory.
You keep X of your X money if you withdraw, with a chance that someone else will lose their money OR you keep your faith in the system with a chance that you lose 100% of X.
Raw data does not tell a story.
I would present some of the insightful data using data science and graphs.
Then you can offer to provide the raw underlying data.
It would be great if one can browse the aggregate numbers and compare them to say other zip codes / other factors.
Good thought - were planning to do some aggregation but there’s actually literally too much data to be holistic, so we’re going to do it on a few large plans and go from there
Would anyone here find it useful if I offered to teach algorithms and data structures, specifically catered towards leetcode kind of problems.
The approach would be (writing it from memory, will revise it if there is any feedback):
First master the basic data structures and be able to manipulate them rather quickly. We will write many small programs to ensure that a one can perform most of the common operations on a given data structure straight from memory.
Then we will write transformations, i.e. being able to convert one data structure into another.
Next up with be problems that requires a combination of data structures.
We will spend a good about of time in graph problems, the usual data structures used to store / manipulate them and understand some of the basic graph algorithms ( MST, Traversal, Shortest Path, etc.)
We will briefly spend some time on sliding window problems.
Dynamic programming, Greedy and divide and conquer techniques are rather simple, but we need to distill it down to a science so that we can code them eyes closed :-)
Order complexity, how to think about it by looking at an intermediate step and calculating how many operations are needed to get to next step. We will dig a little into the mathematical aspect of it.
I've got a couple hundred LC's under my belt but I would still definitely appreciate something like this. Do you have a discord in mind or something else?
Currently gainfully employed still, not sure if being laid off is a requirement but I'd like to keep my skills sharp just in case.
Discord would be great.
The parent comment was -1'ed perhaps because it came across as selling.
Was trying to help folks here as I have recently gone through the ordeal of getting into a FAANG company.
Focus on these things in a round robin, based on how important they are to you.
Catchup with family, send texts/emails.
Plan your day/week/year/vacation.
Self development (communication skills, new skills, reading, meditation)
Self entertainment (watch movies/shows or read books, anything that makes you happy without bothering others)
Time will eventually become the most scarce commodity in your life, make good use of it while you have plenty of it.
Also (n+1)^ = n^2 + 2n +1
i.e. you can have the previous square and just add 2n+1 to it to get the next square (which is 3 additions in total).
square += i + i + 1
if square < n; break
Oh I see. Yeah when you do a ctrl+f it doesn't say something like "let us take a picture of you" but I do see the cert at the bottom/placeholder when you decline.
Suppose it could be a wow factor/adds to the interactive elements of the page.
Yeah it wasn't as immediately obvious to me what was going on as I think the author expected, seeing something ask for my camera unexpectedly is alarming! But the article was otherwise pretty great.