DEV Community

Cover image for Are we "developers" gatekeeping "knowledge" from our juniors and peers? 🤦

Are we "developers" gatekeeping "knowledge" from our juniors and peers? 🤦

Eugene Cheah on June 05, 2019

Background Context My startup co-founder recently wrote an article on what I previously considered "common knowledge", an article which ...
Collapse
 
david_j_eddy profile image
David J Eddy

"...programming is relatively immature, of about 3 decades old." A grammical correction here if you would. 'Programming' as the act of instructing a machine to execute a series of steps dates back to the 1940's (en.wikipedia.org/wiki/History_of_p...). where as 'Web programming/development (JS/PHP/Ruby/C#/et al.' is indeed about 3 decades old. As Tim BL released the HTTP 1.x in 1991 (en.wikipedia.org/wiki/Hypertext_Tr...).

Enlightening bit of information: The first 'computers' where female, the first 'programmers' where female, the first 'bug' was logged by a female, and the 'calculators' that landed man on the moon and back...female.

Collapse
 
picocreator profile image
Eugene Cheah • Edited

Ooo, didn't realize the web development one. And that HTTP was in 1991 (I can now claim to be as old as the internet, haha).

Was not sure what to use as the benchmark, and was originally using the SCAMP / IBM 5100 as the baseline of 1975. (how that became 3 decades is my dumb math error)

But I like your Ada Lovelace reference better. Amended it, and thrown in additional references for contrast

Collapse
 
david_j_eddy profile image
David J Eddy

"...e as old as the internet, haha)." As old as the "world wide web". The 'internet', in terms of computers connected via wires, is from the mid 60's with the build out of the ARPA network.

The "web" is that you see in a browser. It is a very very very small sub-section of the "internet".

Glad I could assist in enriching your article. Keep up the effort!

Collapse
 
kayis profile image
K

I think the problem is two-fold.

One part is the active gate-keeping. People running around telling everyone they or the tools they use aren't good enough.

How can you use PHP when there is Java? How Java when there is C#? Why switch to JavaScript when PHP finally became a real programming language?

Even my programming techniques professor said JavaScript was a toy and nothing compared to Java.

People shitting on each others' work for all kind of senseless reasons instead of helping each other out. That needs to stop and I have the feeling that more women and minorities in the industry will just lead to that. CoCs are spreading like a wildfire and people become generally kinder. The few old-school uber-nerds I saw here on dev.to didn't stay for long.

On the other hand, we have passive gate-keeping or simply ignorance. I guess that is what you're talking about. This can have many reasons and I can only talk about the ones I encountered.

I often had the impression I'm a bad-to-mediocre developer, so I didn't value most of the stuff I knew and this lead me to think I was one of the last in the industry to learn stuff. Took me a year to understand functions, took me a few months to understand closures, took me another year to understand monads, etc. I was always a slow learner, swimming with 9, biking with 14, so I guess that's where the impression came from that everyone else already knew the stuff I just learned.

I also had to work with many of such old-school uber-nerds who choose tech for projects and generally acted like they had it all figured out. Took me a few years of freelancing and blogging to find out most of them are just talking big and there are a whole bunch of people out there who don't know half as much as I do and would love to work with or learn from me.

Collapse
 
picocreator profile image
Eugene Cheah • Edited

I like the terms active and passive gatekeeping really well. Was trying to make the distinction between the two, but failed to find those exact two words on it.

Active gatekeeping is something that is much more vocal, and easier to identify. Something that a great many wonderful people is talking and working on.

Passive gatekeeping is exactly what I am much more worried about, especially with more and more individuals making their mid-career switch.

These days, the starting line from programming is all over the place, with everyone learning at their own pace. So dun feel bad if you feel like your slow, as long as you are constantly learning and improving. The instinctive subconscious notion of using age as a benchmark for development experience is shattered. Keep going 👍

Passive gatekeeping, is also something much more common in Asian society in certain regions (japan / singapore / etc). While you will find it very hard to find loud vocal sexism or racism, the numbers do not lie (pay scale, high-ranking leadership positions, etc). And by its nature, much harder to talk about.

Collapse
 
adamiito profile image
Adam Horváth • Edited

I have created an account just to thank you for the article. (About time, I know)

I don't know if I have been so naive or StackOverflow coddled me, but I have always viewed IT as relatively open and welcoming field. When I look for something no matter how obscure it is, there is always some good and patientSamaritan to help, answer questions no matter how stupid or basic or at least show the way to the solution.

Lately I have noticed the ugly spectrum of IT as you describe. Sexism, arrogance or just unpleasantness and it still baffles me. Thanks for speaking out.

I just wanted to say thanks to all the helpful and amazing people who still make me proud of being in the same field. I hope to repay one day once I stop being an imposter.

Collapse
 
picocreator profile image
Eugene Cheah • Edited

Worry not, to quote a founder of dev.to

We all are, and still is at times today (including me) 🖖
~ Welcome onboard

Collapse
 
adamiito profile image
Adam Horváth

Haha, yeah, I have read the article some time ago. It really helped with my mental health at work.

Collapse
 
cdaracena profile image
Christian Aracena

Thanks for posting this, I completely agree with your sentiment throughout this piece. The tech industry is demographically changing but it still lags behind in terms of emotional and social intelligence. Not everyone can be socially aware but everyone is capable of improving the way they provide feedback to others (and especially those of us who are newer). Always keep in mind that everyone starts somewhere and no one, not a single person on this planet knows everything about the particular field or hobby that they partake in.

A lot of juniors already suffer from debilitating imposter syndrome (especially those of us that don't come from traditional computer science backgrounds or from communities of color) as it is, and I would expect most seniors to be aware and understanding of that.

Collapse
 
katieadamsdev profile image
Katie Adams

This is an absolutely fabulous article and I'm so grateful to you for writing it. You're incredibly self-aware both as a programmer who has previously made these comments and as a man aware of his privilege. It's wonderfully refreshing. However, as is often the case, the people who need to read this sort of thing will likely not do so. What advice would you give to somebody who hears this sort of comment? How can we stand up for our own knowledge (or lack thereof)? What can we say to a 'bro-grammer' to make them aware of their damaging effect?

Collapse
 
picocreator profile image
Eugene Cheah • Edited

If challenged directly in person (while lacking the context), I would suggest something like the following.

Everyone has moments, where they are lost, confused, and needs help learning something new. And for some of us, it is now.

The key thing is to avoid "you" or "me" and to generalize it, to normalize the feeling of being lost.

As this feeling is universal for all individuals. (Personally, a non-programming example would be kicking a football in soccer).

Naturally, this takes incredible courage. And personally as an introvert, before I built my skills and experience, it can be terrifying to make a stand. And I would consider myself lucky. As such I understand such action is not for everyone.


Which is why I feel it is more on those within the community or the workplace. Those in between "senior" and "junior", the majority in most workplace, and have gone through the hurdles. To step in, and make the stand above, when they see it applied to others.

A situation that I understand not everyone would be lucky enough to be in.


Alternative: Find a safe space to ask such questions

Look outside your current workplace.

A huge shout out (in Singapore) is for junior dev community.
For those in other areas, try searching meetup.com for the keyword JuniorDev to find fellow peers who are struggling, and mentors willing to help.

And if all else fail - reach out to the nearest JuniorDev from your location, and ask them if they know anyone in your area who is willing to provide mentorship. And finally the internet itself


However, as is often the case, the people who need to read this sort of thing will likely not do so.

I really wish I have a simple answer to this. Especially on those within the extremes.

The way I feel about it personally is there is a spectrum of those who are being inclusive and supportive of others, to outright hostility. And everyone else in between, who is the majority.

And as naive as it sounds, it is my wish that through highlighting this to those around me, through articles like these as it gets shared to them. That it can help make those in-between slightly more inclusive and supportive of others.

Just as how "bro-grammer" culture is normalized in several places. The same is possible to normalize a supportive and inclusive culture. One workplace, one community at a time.


I hope the above helps!

Collapse
 
katieadamsdev profile image
Katie Adams

Fab response. Really helpful, thank you. I love the idea of normalising the language used to express the problem - so thoughtful!

Collapse
 
ssimontis profile image
Scott Simontis

As someone who was trained in a more "disciplined profession" as am Emergency Medical Technician, I would not get your hopes up about things becoming more logical and evidence-based over time. It's still disturbing to me how much of medicine was luck...someone lives or dies because you have a random hunch you can't explain to order some atypical lab work. Even the curriculum for EMTs, featured a ton of recommendations and skills that science demonstrated was at best ineffective and worst-case actually reducing the odds of survival (example: spinal immobilization and backboarding suspected spinal injuries). Becoming a good EMT had a ton to do with fortune; if your partner wasn't burnt out, cynical and in general just not a joy to spend 12 hours with, you would miss out on a lot of knowledge and find yourself developing some of the same negative beliefs.

Professionals are a product of their environment. Toxic organizations breed toxic leaders of tomorrow.

Collapse
 
picocreator profile image
Eugene Cheah • Edited

High five there, as a fellow EMT. Not an active one - but still go for my recertification every 2 years.

I think I get what you mean, regarding procedures changing - at times it's small and incremental - but when you have a gap of 2 years before recertification. These small changes add up (and improve survival rates, according to science and data!).

So it was, for lack of better words, interesting experience for me to be fighting against muscle memory at times, haha. (What was drilled into your head to help others, does the opposite!)

Becoming a good EMT had a ton to do with fortune;
...
Professionals are a product of their environment. Toxic organizations breed toxic leaders of tomorrow.

Completely agree!


Sidetrack: I presume you're referring to - jems.com/articles/print/volume-40/... regarding changes to spinal management.

Collapse
 
ssimontis profile image
Scott Simontis

It's weird when you talk to paramedics outside of the US. My best friend used to be an Australian paramedic and they don't backboard at all...they basically have a form-fitting inflatable matress for lack of a better description so the patient sinks in and isn't moving around a lot (the amount of time a patient spends backboarded once at the hospital can produce further complications).

In 2013, I had instructors telling me to go for a jugular IV in critical situations even though we had IO lines available. I guess some people are very comfortable in their old-school ways.

Thread Thread
 
picocreator profile image
Eugene Cheah • Edited

As someone who was trained in a more "disciplined profession" as am Emergency Medical Technician, I would not get your hopes up about things becoming more logical and evidence-based over time.

In a sense, you are really proving your point on culture is still a large part of how things will run. We can be in an industry with over a thousand year worth of data, and still fall back to instincts.

In 2013, I had instructors telling me to go for a jugular IV in critical situations even though we had IO lines available.

This is personally very terrifying to hear, I have heard similar stories on how EMT in US differs greatly from state to state (let alone another country).

In Singapore (where I am at) we are told the opposite to never attempt such a procedure on-site unless it's an extreme last resort (no valid IV on hands and legs) with no other means of evac. Making such a procedure theoretical, instead of practical.

Because we are a small island, we are pretty much 15 minutes away from any hospital on any part of the island. There is always an evac route. So god forbid if there is ever a large disaster which turns that theory into practice. Only seen jugular IV done in ER once, and never on route.

Thread Thread
 
ssimontis profile image
Scott Simontis

We did a lot to standardize things over the past 5 years or so. They changed the curriculum into a national standard, as states had some very unique systems to cope with logistical challenges. There has always been EMT-Basic, EMT-Intermediate and Paramedic, but states used to have a lot of freedom to define those. In Montana, where there are counties that are 600 square miles and all volunteer, Basics could get training to intubate or do IVs because they didn't have resources to train paramedics. Now Basics are EMTs, Intermediates are Advanced EMTs, and Paramedics are still Paramedics.

It's sad how much of our system is dominated by profit. The provider I used to work for claimed they couldn't meet their contractually obligated response times without a $10 million grant (keep inb mind they bid on this contract, so they knew exactly what they were getting into). The city's main EMT service said their studies showed meeting the goal was possible without any additional funding, so the private company stopped 911 service over a weekend and forced the city to take over 60 square miles of coverage. The sickening part is that they kept all their staff in the area to continue running private facility transfer calls because they were making money off of those.

Didn't expect so many other EMT developers on here, thank you all for your service!

Thread Thread
 
picocreator profile image
Eugene Cheah • Edited

We did a lot to standardize things over the past 5 years or so.

That's awesome to hear

It's sad how much of our system is dominated by profit.

A sad truth, of human greed on every system we touch - regardless of industry

the private company stopped 911 service over a weekend and forced the city to take over 60 square miles of coverage

This is literally taking hostage of lives 😞

Didn't expect so many other EMT developers on here, thank you all for your service!

I think it actually makes sense, they have much overlap in core skill sets in my opinion.

But they have a huge difference in pay (hence why I believe the switch makes sense to many). Did a long tweet thread on this before, on how those in the medical profession deserve a better salary.

PS: its a long tweet thread, so click on it to view the full thing.

Collapse
 
peterwitham profile image
Peter Witham

I think your arguments are well thought out and presented, it's sad that this situation still exists after all this time.

Given the nature of our industry, so many comments are 'hit and run' these days, even if they have good intention. I feel that if someone is going to comment on other persons work they should give it some thought and time, and if that time is not available right then either come back and comment or just leave it alone.

I have come across so many great articles on sites that I'd like to comment on, only to find that the comment system is turned off completely, perhaps to prevent this kind of issue from occurring, and I confess I have started to think the same way about my blog. I love and welcome interaction, but not at the cost of moderating less desirable comments, and by that, I don't mean negative, I just mean unhelpful.

It would be great if everyone would stop and think 'am I contributing to the conversation with my feedback' before they do it.

As an aside, I write and share as much as time permits to prevent the lockin and gatekeeper problem. To do that it means I have to write content that is understandable by all levels of experience. In the past, I have had comments questioning why I share so many very basic things.

The answer, in my opinion, is simple, we all have different levels of understanding and that's the beauty of what we do, to share and learn together whilst helping those that need it without judging.them.

The last paragraph is the very reason I have become so fond of dev.to compared to other virtual hangouts.

Collapse
 
nuuou profile image
Zeth Schlenker

Wonderful article.

I struggle with this more often than I'm comfortable with. With rapidly changing libraries and approaches to development, it's so easy to sit on a high horse when you know something and someone else doesn't.

This line especially hit me:
"Isn't it very obvious, I doubt it's worth writing"

Man, that simple statement (or thought, even) has the potential to kill any motivation of someone who's riding the "I just learned something new" wave. And that's not cool. We're all trying to make cool dev stuff together, and we all win when people learn new stuff. :)

Collapse
 
picocreator profile image
Eugene Cheah

Keep that "I just learned something new" wave going! Woosh!

And keep on surfing and learning!

Collapse
 
dkull profile image
Tanel Liiv

There is no such thing as "javascript jvm". JVM is Java Virtual Machine, a name for a specific virtual machine meant to run Java bytecode. Javascript has specific VMs - eg. SpiderMonkey and V8. Or just call it a "javascript vm".

Collapse
 
picocreator profile image
Eugene Cheah

Thanks! I changed it to "javascript engine" to avoid confusion

Memory is a bit foggy - but I do believe the original line was more like "Doesn't the javascript engine, automatically optimize such execution, like the Java JVM?"

Edited for clarity =)

Collapse
 
jtblackstone profile image
Jason

As the junior developer trying to negotiate and navigate the waters of where can I go for help, this article was a wonderful read. I haven't personally experienced the feign surprise. I have, however, gotten the cold, superior brush-off. 'if you don't know that then you shouldn't be calling yourself a developer.' 'If you don't know x then I can hardly be expected to explain y.'

I avoid stack overflow for those very reasons. Unfortunately it has served to slow me down, as I am now resorting to pouring through my books or the countless sites for one specific fix. And when you aren't even sure what to ask to fix your problem, then Google will fail you. And taking that sort of question to stack or forums is guaranteed to bring the 'we have no time for such trivialities' crowd of responses. Sadly, I have honestly gotten those responses above. Almost word for word.

So thank you!

Kindest regards,

Jason Blackstone

Collapse
 
mshappe profile image
Michael Scott Shappe

Every time I find myself on the verge of asking a co-worker -- especially a junior co-worker, "How did you not know that?!" I realize that the answer is very simple: nobody ever told them, and they never had any reason to know until that moment.

That's a pivotal moment. A moment when feeling clever about a moment's snark can instead turn into a moment of constructive mentorship. And as much as I like to be known for clever snark, I also know I owe my own success to constructive mentors, and try to pay that forward.

Collapse
 
antonrich profile image
Anton • Edited

You look at this in a bubble.

What if that senior was just rejected by another girl. He is just being a jerk in places where he can be a jerk. In others words he is just getting out his frustration in an aggressive form.

By the way, I started out my comment wrong. Instead of excluding I should added to what you said. Like in improv with an "and" exercise.

Collapse
 
picocreator profile image
Eugene Cheah • Edited

If so, especially if it is someone I know in person.

I would want to treat him to a beer (or anything else culturally appropriate if one does not drink alcohol), to hear out the frustration. And if it's not enough, play some board games.

To let him/her know, there are other healthier ways to let out that frustration, with friends. And not be a jerk at the same time.

Collapse
 
phantas0s profile image
Matthieu Cneude

Thanks a lot for this article. You summarized what I think for a long time now. The way we pass our knowledge to the next generation of developer is really important to me, because these developers will shape the world of tomorrow. I'm convinced of that.

First, I would like to come back to this statement:

"As a result, the technology we learn seems to be constantly changing, with little in the way of a stable (think 12+ years) long term standard for anything."

I think this is a common conception and not totally true: the "first principle" of our craft doesn't change that much. We think it does because we constantly rediscover things, since we have a poor knowledge of the history of our industry.

When I say first principles, I speak about general logic and problem solving skills, programming paradigms, everything which help you adapt to new problems, high level languages and frameworks. I believe that learning these first principles for a developer with some experience is essential. For the beginner, it might be boring and discouraging.

In short, the capacity of somebody to adapt and learn should be more rewarded than his raw knowledge.

That said, I agree with the article in general. I wrote something similar some time ago, for those interested: thevaluable.dev/development-easy-j...

How many time after an interview I heard some stuff like: "This guy don't know how a promise work in JavaScript, he's not a senior developer". The same developer could be insanely good to many other things, nobody will know it. This is wrong.

Collapse
 
frankfont profile image
Frank Font

Sometimes personal attacks (or unkind ridicule of our work) comes from a place of weakness. When I'm on the receiving end I try to empathise on how their life experience may have shaped them for this moment and then look for common ground on acknowledging what I can take from the insulting criticism to improve.

Collapse
 
lagerenas profile image
lagerenas

This is a great article. You said that you are not a great writer but I disagree. You found a good balance of entertaining images to pair with this important topic. The tone of your words is perfect for an open dialogue free of blame.

Collapse
 
downey profile image
Tim Downey

Thanks for writing up this post @picocreator !

Along these lines, I am a big fan of the Recurse Center's social rules -- particularly in this case the one about "no feigning surprise." Their explanation of this:

Feigned surprise is when you act surprised when someone doesn’t know something. Responding with surprise in this situation makes people feel bad for not knowing things and less likely to ask questions in the future, which makes it harder for them to learn.

No feigning surprise isn’t a great name. When someone acts surprised when you don’t know something, it doesn’t matter whether they’re pretending to be surprised or actually surprised. The effect is the same: the next time you have a question, you’re more likely to keep your mouth shut. An accurate name for this rule would be no acting surprised when someone doesn’t know something, but it’s a mouthful, and at this point, the current name has stuck.

Feigning (or actually being) surprised is definitely not as mean spirited as some of the examples you referenced, but it can still discourage folks that are new to an area from speaking up or reaching out for help. Just wanted to note this as well since I think it's pretty easy for (otherwise well-intentioned) people to do this without meaning to.

Collapse
 
picocreator profile image
Eugene Cheah

Really like the Recurse Center's social rules, wish I knew about it earlier.

I embedded your whole comment to the end of the article to highlight it much better!

Collapse
 
dennismohan profile image
Dennis Mohan

First thing that popped to mind with the concat vs push was similar to your first reaction. This should be some basic comp sci, so it's somewhat surprising people aren't aware.

Interesting write up and probably something I can be more conscious about. Sometimes even very knowledgeable people will misunderstand certain implementation details. These mistakes can happen to anyone, and code reviews could/should be used to question all things. Its supposed serve as a medium for constructive criticism and learning. Unfortunately, all to often I see people looking at code reviews and PRs as a chore to get over with.

On a side note, I'm curious if you run into cases like this more with informal training/education vs a more formal comp sci degree.

Collapse
 
picocreator profile image
Eugene Cheah • Edited

Unfortunately, all too often I see people looking at code reviews and PRs as a chore to get over with.

Sadly very true, due to various constraints

On a side note, I'm curious if you run into cases like this more with informal training/education vs a more formal comp sci degree.

I would say, it really depends on the company culture, maturity of product, and/or process.

Personally, I will admit that even I would make such a "performance issue" and would let it be approved in a PR. I would comment on it, but I will not force it. Personally, I run by the statement...

premature optimization is the root of all evil (or at least most of it) in programming.
~ Donald Knuth (The Art of Computer Programming)

Something I learned, first hand. Is that in the process of creating an application where everyone has strong formal education, is that we can end up endless chasing for O(1) or O(n). It can be a huge time sink, especially on more complex problems.

Because until you have real data and real use cases: sometimes counter-intuitively when n is a small number, u can have O(n^2) performing faster than the O(n) solutions.

Personally, I have spent time on a team, which did a whole 2 weeks on changing a system from O(n^2) to O(n), only to revert it back after launch a month later. Because it was much slower (oversimplifying the problem, the O(n^2) had cachable steps in between, while the O(n) did not.

Since then, learning the hard way, for new features I run by the following in sequence.

  • Is it under <500ms? (For API calls for example)?
  • If not why?, is it a quick fix using cache?, is it good enough for now to ship (UI loading bars, etc)?
  • Do we have actual use case data?
  • How do we make it better then?

Internally we are constantly monitoring our user flows, and looking into areas to improve based on actual usage. Which is precisely how this whole "concat" vs "push" came about, as it was detected in our monitoring process.


It's also something that can happen in not so obvious ways for even a skilled team.

function addCustomObjX( inArray, objX ) {
    // ... does some obj processing
    return inArray.concat(objX)
}

The above would be approved as a merge request. Because if anything its safer to assume one should never modify the input array. If a function does so, it is required for the developer, to do the additional step of commenting and documenting so due to the potential unintended side effect.

What was not predicted (or even in the scope) of the above function was that the resulting usage was ...

while( some condition is true ) {
    // ... does some complex stuff
    domArray = addCustomObjX( domArray, objX )
}

Which caused the huge performance hit! - and it's ok because all we needed to do then next, was make the slight change and document it.

/** 
 * [Original comments]
 *
 * Note: This modifys the input array, and returns it. The developer is expected to 
 * clone the input array if they expect it to be unmodified.
 **/
function addCustomObjX( inArray, objX ) {
    // ... does some obj processing
    return inArray.concat(objX)
}
Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

Thank you so much for writing this!

I only want to add one thing:

I can generally agree with "don't feed the trolls," but I've found there are circumstances in which they need to be addressed head on. The Jon Somnez debacle on Twitter is an excellent example.

That said, I'll slap a huge "don't try this at home" label on it, as it has taken me about a decade of forum moderation and IRC experience to get to this point. If you're going to take on a troll, you have to make sure...

  1. You initially address them in a manner that will account for honest mistakes and general social inexperience. (You mentioned this, and you're right on.)

  2. You are confident you can rhetorically paralyze them in a short span of time; the goal is to ultimately defuse the situation, sending a clear message that "this behavior is not tolerated here." (Formal debate experience and college communication courses really help here.)

The trouble with everybody ignoring a troll is that it sends a message that their toxicity is somehow a valid, protected perspective that is protected under "tolerance". Never tolerate toxicity. Trolls are bullies, and without fail, bullies are cowards. This is why #2 above is so important: trolls don't really put much effort into thought, so if they can be rhetorically paralyzed, they'll ultimately flee a community. It sucks the fun out of trolling for them. They enjoy an argument, but not a public loss.

Alternatively, if the troll doesn't flee, they will in the least be forced into exposing themselves as irrationally aggressive (versus their preferred subtle passive-aggressivity), at which point any somewhat healthy community (and its moderators) will have the evidence necessary to defestrate said troll.

Like I said, it's taken over a decade for me to develop the rhetorical skills to incapacitate a troll. I have some natural proficiency at rhetorical combat, but I'd still say that skill is 90% practice. Until you have been able to put in that time, it's best to leave the trolls alone.

Collapse
 
swfisher profile image
Sam Fisher

Isn’t it obvious that (programmers are jerks who love to feel smarter than you)? Are you a (n00b who I get to feel smarter than)? Never write such articles again.

Just Kidding! This was an absolutely fantastic read that I hope to apply wherever possible moving forward.

Collapse
 
picocreator profile image
Eugene Cheah

Having one more person, to help on this behavior. Makes this article: worth it!

Collapse
 
fagnerbrack profile image
Fagner Brack

Great post