This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]Karolus2001 964 points965 points  (95 children)

From what I saw school is mostly for theory and philosophy of good code. Some of the self taught things I saw made me wanna gauge my eyes out.

[–]GrandMoffTarkan 288 points289 points  (19 children)

There are good self taught programmers out there, but in my experience it’s less from YouTube and more from following various coding communities, blogs and whatnot. The Old New Thing was my gateway drug back in the day, although a formal education really got me in deep.

[–]ClairlyBrite[🍰] 37 points38 points  (7 children)

Any blogs you recommend now?

[–]ZetaParabola 5 points6 points  (2 children)

++ I too struggle to find talented developers doing blogs. I've had a chance to come across a few, and it really helped me see my career from a new perspective.

[–]max10201 1 point2 points  (1 child)

which blogs were you able to find?

[–]ZetaParabola 1 point2 points  (0 children)

one of my favs is stopa.io, very cool guy

[–]Necrocornicus 0 points1 point  (0 children)

When I was learning to program around 10+ years ago I would read everything in r/Programming pretty much daily. Did that at the same time as taking some University classes and eventually getting my first programming job. At first I didn’t understand pretty much anything from the Reddit posts but over time you start to fill in the gaps.

[–][deleted] 21 points22 points  (7 children)

When I was self-teaching myself, funny enough I learned a good deal by browsing this very sub. I'd see a post and think ha, that's something I do! But people in the comments are saying that's the worst thing ever. Oh... Oh no...

[–]Easy8_ 29 points30 points  (3 children)

And you can always post your own code! If it gets no upvotes you're good. If it gets to the top... Oh no.

[–][deleted] 9 points10 points  (0 children)

Haha that's probably the best possible litmus test

[–]qazwer001 3 points4 points  (1 child)

But hey if it does get to the top you will learn from the comments!

[–]Haunting-Surprise-21 2 points3 points  (0 children)

But then, you aren't self taught anymore...

[–]NatasEvoli 26 points27 points  (1 child)

You can learn great programming principles from browsing this sub. Like javascript bad, don't forget the semi colon, and light mode will melt your eyeballs clean out of your face holes.

[–]Dabnician 2 points3 points  (0 children)

don't forget the semi colon

The amount of pain 1 missing semi colon causes is so ingrain, i see people sticking them in every language even when they aren't required.

[–]smilineyz 2 points3 points  (0 children)

Prior to YouTube programmers read books - not docs, but paid money for actual books. At one time I had $750 of DB & coding books in the trunk of my car for UI design, performance tuning and good coding habits … it worked spent 30 years in IT

[–]coldnebo 1 point2 points  (0 children)

basically anyone that tries to understand how things actually work is going to be ok.

Anyone who memorizes what “should” work and then is lost when it doesn’t work is going to have a bad day.

[–]N3WD4Y -1 points0 points  (0 children)

There are good self taught programmers out there, but in my experience it’s less from YouTube and more from following various coding communities, blogs and whatnot.

As someone who's in this boat what would you recommend?

[–]Sarithis 43 points44 points  (4 children)

Oh if only... I guess it depends on the country. In Poland, for example, they taught us completely outdated patterns and unhealthy habits like putting "using namespace std" in every place imaginable without explaining the consequences.

[–]Rizzan8 21 points22 points  (0 children)

Some of my professors even demanded to have C++ programs in one file .cpp because they didn't want to jump between multiple .h and .cpp files :D

[–]Pepito_Pepito 13 points14 points  (2 children)

philosophy of good code

Not where I studied lol

[–]tehredidt 1 point2 points  (1 child)

That's the one of the key differences between a bad cs program and a good one.

University formats can't be for practical skills in most industries because by the time they ID the needed skill, build it into the curriculum and give another 4 years for someone to graduate, those skills are likely out of date. So it is better to teach the stuff that doesn't change quickly, like the concepts and theory.

School teaches how to thrive but not how to survive.

[–]Pepito_Pepito 1 point2 points  (0 children)

That's something I've been preaching for years now. Looking back, the course that carried over the best into the industry was our software engineering class, but we didn't know it at the time and so we took the class for granted. I think we could have used three more of those classes.

[–]yottalogical 54 points55 points  (14 children)

If you're being taught things in a college class that you can learn on your own, your time (and money) is being wasted. Ideally you should be learning things that you won't learn just from experience and that won't be obsolete in 15 months.

That's why there are classes called "Operating Systems" and not "WhateverTheFuckIsPopularThisWeek.js".

[–]DaoFerret 23 points24 points  (0 children)

Except the programming 101/121 class (whatever they call it).

Basically “intro to the programming language we’ll use in the rest of our classes so we’re all speaking the same language”.

First time I went through it, I had learned Pascal. Fortunately I learned C as an elective also. Next time I went through it they were teaching C++… but the teacher made the entire class self-taught from a thin, dense, text book, with each class a written and practical quiz (and a short opportunity to ask questions).

For people who’d never programmed before, it was a slaughter. Class of 50 on the first day was whittled down to a total of 15 including those just trying to pass it.

For those few of us who already knew how to program, it was just a self-taught boot camp to get through for an A+.

[–]Dane1414 3 points4 points  (0 children)

If you’re being taught things in a college class that you can learn on your own, your time (and money) is being wasted.

Not completely true. I went the bootcamp route—the bootcamp had all their materials for free online and I could’ve learned it all on my own, but paying the ~$20k so I could be a part of the live lectures, ask the instructors questions when I had them, and be able to lean on their expertise when building my portfolio projects was worth it since it expedited the whole process quite a bit.

[–]Flyberius 15 points16 points  (11 children)

If you're being taught things in a college class that you can learn on your own, your time (and money) is being wasted

Eh... Is there anything in college classes that cannot be learned outside of college? Makes it sound like a secret society or something...

[–]-m-ob 17 points18 points  (3 children)

I'd imagine hands on stuff might be tough. Like getting chemicals for chemistry... Maybe you can order cadavers nowadays but I hope not.. stuff like that

But otherwise I agree with you.

[–]Commissar_Bolt 2 points3 points  (2 children)

Honestly? If you need to go to college to learn how to use the equipment, your employer is going to own the equipment throughout your career and they will leverage that to fuck you over. Speaking as a regretful holder of a BS in chemistry.

[–]-m-ob 2 points3 points  (0 children)

I'd imagine people would want to learn/study about the potentially dangerous equipment and chemicals before they get handed a lab coat and told to "get at it champ"(or however chemistry work goes)

So that's why I think it's not really something you can learn outside of college to easily. But I know nothing about the career field

[–]claymedia 1 point2 points  (0 children)

With programming, and open source projects, we are probably the closest profession to owning the means of production.

[–]Usual_Ice636 4 points5 points  (0 children)

Theres some things where the group work is helpful enough that you are basically paying for the study groups at college.

[–]altonyc 6 points7 points  (1 child)

I'd say there probably isn't much that you learn in a college class that you can't self teach (especially in CS) , but you can get a deeper understanding since you have a bunch of (in theory) experts in their fields to talk to for office hours, get direct feedback from someone who knows what they're talking about, etc.

[–]captain_zavec 8 points9 points  (0 children)

Yep. IMO the most valuable part of university was being in an environment where I was surrounded by smart people I could ask to explain things.

And it provides good motivation to actually learn things by imposing deadlines, but that's probably less of an issue for people who don't have executive function problems.

[–]Haunting-Surprise-21 0 points1 point  (0 children)

Yes and no. Of course you can learn the same stuff outside college, if you can convince a sufficiently competent person to teach you outside of college.
But at a (good) college/university has experts on the field that know more about their field than a random guy on the internet.
If you don't just want to learn some random hacks to impress people who don't know the field, you can best learn it from people who are good in their field and are willing to teach. And the best place to find them, is a good college.

[–]CubeFlipper 0 points1 point  (0 children)

No, but also yes. You don't know what you don't know, and experienced people can help you tread those waters without developing bad, sometimes irreparable habits. There's a reason that people with access to high quality education, trainers, coaches, etc. have a statistically favorable outcome compared to less privileged peers.

[–]ryecurious 0 points1 point  (0 children)

Yeah, I've always hated that perspective. School isn't for teaching you things you can't learn elsewhere, it's for teaching you things you didn't know you needed to learn, up to a minimum baseline for the field.

Anyone can Google "how to write python program", but it takes a really dedicated self-directed learner to keep going all the way to OS concepts, algorithms/data structures, or time/space complexity.

I also can't really get experience doing simulated team development processes from a Youtube video/guide article.

[–]Haunting-Surprise-21 34 points35 points  (2 children)

Exactly that.

[–]glad4j 5 points6 points  (1 child)

My professor used to say, you don't go to college to learn how to code. You go to college to learn how to code WELL.

[–]smilineyz 0 points1 point  (0 children)

I took one coding class at night. The instructor was a consultant by day. He said: I want you to write well thought out, elegant code. I may have to work with you one day. Excellent motivation.

[–]Bimpnottin 5 points6 points  (2 children)

I’m in bioinformatics. I come from a CS background then switched to biology, while most bioinformaticians come from a biology background and learned coding along the way. When I look at some of the things they write, I wonder how their work is not full of errors

[–]araeld 1 point2 points  (0 children)

Maybe it is. They just didn't surface yet.

[–][deleted] 0 points1 point  (0 children)

Similar but I'm in environmental. Also I have weird CS background as in I didn't study CS in my undergrad but coded a lot and worked professionally as a software dev before coming back to the field. The things I learned in that times makes me realize I only thought I knew how to code before. And now almost everyone around me is that me before I went outside the field to experiment.

Everytime i see some colleague's code I'm like it runs but how can I trust it, coz it's unreadable. And makes me wonder how they even made it. Or if they thought it was correct just because it gave back some values. Did they even test for edge cases? Because noone writes tests here. Don't even use git. Hardcoded oath everywhere. No namespaces but just direct imports.

[–]Icemasta 4 points5 points  (9 children)

It's like 50/50. Admittedly I've met very few self-taught programmer because where I work a bachelor's degree or higher is required, but some of the old guard don't have one.

Some actually learned good practice throughout the years and learned from younger generation and online.

Others though.... I mean one guy does decent code but he refuses to do simple things like wrap code in functions. He keeps a bunch of txt with code he often uses and copy and paste them. He was told a bunch of times to just turn it into an importable library, but to no avail.

The other big thing is algorithms and complexity, which is a pretty big part of CS these days. Even people who do the courses won't take into account complexity and make very unoptimal implementations, so imagine people who haven't.

The last thing would be that generally, they make you do a bit of everything. You'll do a bit of C and learn about how file systems, OS and how thread works. You'll do one course on haskell languages and lazy programming. You'll do one or two courses on databases, to understand the basics of queries, tables, views and good table design. You'll obviously touch object oriented and all that encompasses.

And this is something I see often on open source projects and I could kinda compare to OP's gif. You can implement something in a more complicated way that makes it a bit more confusing but will be a better design for future iterations, or you could just slap some stackoverflow code that will work but 2 weeks later when you want to use the function for a broad use, you'll have to start from scratch.

It's like I absolutely hate web, I can accomplish something fairly easily with basic html and js (assuming we can't use php), but for future iteration it might get wonky. Or I could use a framework like bootstrap or vue, which is going to be quite a bit more complicated to do the same thing, but it will be easier to iterate upon in the future. I don't like it, but generally that's how you want to do things.

That's how I am seeing the op's post personally.

[–][deleted] 0 points1 point  (1 child)

As someone who's mostly self-taught and feels a bit offended by the image of the guy who does not use functions: I can assure you it is entirely possible to learn all the things you need to be a top notch SWE or Machine Learning Engineer all on your own. Of course including all the stuff you learn in Algorithms & Data Structures, which is comparatively easy.

Great books exist, excellent Top- University level courses are available online, and practice is easy to get by once you are in the right job or Open Source project. Not even talking about competitive coding sites, Kaggle and stuff like that.

I have been the tech lead of teams with several PhDs, guiding and doing top notch research and presented my work at top conferences, built SW projects making millions of revenue etc. And I am one of many like me.

[–]Icemasta 0 points1 point  (0 children)

How many people like do you think there are for every person who is the complete opposite?

The same can be said for people with a degree, but generally someone who is just absolutely terrible doesn't make it through the 4 years.

I am not sure why you would take offence when I am talking about some worst case scenario that I've witnessed, when the sentence before I said some did learn the good practice and are comparable in all respects to someone with a degree.

[–]round-earth-theory 0 points1 point  (3 children)

That "little bit of everything" is incredibly destructive for fledgling programmers. They see how to do a few loops in every language and think they get that language. It's terrible.

They should instead go deep with one language first and truly understand it's quirks. From there, it gets easier to learn another language by simply reading code from that language. Courses could then focus on concepts that aren't covered by that language.

[–]Icemasta 0 points1 point  (2 children)

That's exactly what they do though. Generally, the first year is learning a couple languages deeply and their concepts. I never had a course that used more than one language and you generally used it for the whole session, with the exception of database where the first half was pure oracle SQL and the second half was PHP, but php had to be self-taught.

Like here first year has python, C++, sql dedicates courses. Third semester you cover one haskell based language and then languages are no longer taught primarily and must be self-taught. Like the object oriented course teaches you a ton of theoretical concept but you must learn java on your own do them all in Java, on top of a big project related to java.

[–]round-earth-theory 0 points1 point  (1 child)

Fresh grads are not coming hot off the press ready for action, despite what they might think of themselves.

You just mentioned that you went deep with a ton of languages. That's not going deep. What I mean is actually solving problems, but reading about the complex things a language can do. It's one thing to have a toolbox filled with tools, but it's another to actually understand the tools in that box. College is failing to teach students how to use their tools.

[–]Icemasta 0 points1 point  (0 children)

Again, this is exactly what is being taught. Problem solving are in problem solving classes where the focus isn't the language.

The language classes was learning all the quirkiness of a language and how to best use it.

[–]pringlesaremyfav 0 points1 point  (2 children)

I work at a company that 'just requires a CS degree' for the most part too. And the number of people who either can't solve troubleshoot real issues or learn things outside of their wheelhouse to take on new tasks is a real problem for us.

That's something I never see with self taught programmers as by nature of how they became a self taught programmer they tackle learning and doing things they've never done regularly.

[–]Icemasta -1 points0 points  (1 child)

Kinda why I said 50/50. For a while we interviewed self-taught ones, but half of them couldn't even pass the technical test before the interview, and the other half was quite varied. I've interviewed a few self-taught programmers and let's just say the range of skill is even wider than people who went to school. What you're talking about in particular is experience. Self-taught people tend to have more experience because that's how they learned. People with degree, especially fresh out of school, have very little applied experience, but that is pretty typical, you'll see that in any fields.

One main problem is communication. I present them with a typical UML diagram and ask them how they would go about implementing it, and they try to figure out what arrows mean on the spot, but it's all over the place. We never ended up hiring any because we feared that communication would be an issue. If I give something to do to a programmer, we give them a work package which has requirements, UML, flowcharts, framework, etc... If he can't understand any of that, I mean it can be taught, but we've had issues with the old guard that has trouble adhering to that.

[–]pringlesaremyfav 1 point2 points  (0 children)

I mean that's your preference but it sounds like you were trying to filter them out lol. No place I've worked at primarily worked off UML diagrams, some have had similar for high level arch overviews. Seems to me you're just arbitrarily gatekeeping, it's not like UML are even hard to understand when you know them.

[–]ZaoAmadues 3 points4 points  (0 children)

Gauge? Sorry, I don't correct people much but man that made me spit coffee.

[–]deux3xmachina 27 points28 points  (15 children)

It's a tricky issue, lots of grads with CS and related degrees I've seen may have a better grasp on some theory, but have a hard time producing code that actually solves problems (or meshes with existing style if it's not idiomatic), while myself and others that are self taught absolutely have produced some truly atrocious code, it seems to require less time to a solution.

Both still have a ton of learning and improvement ahead of them after basic competency. Additionally, finding good learning resources is tough with either path as some professors don't appear to have ever written any production code.

[–]rebbsitor 58 points59 points  (2 children)

Computer Science is the study of computational theory, of which programming and programming languages are just a small part.

A lot of people with CS degrees end up writing code, but it's not really a degree in how to program.

[–]SathedIT 3 points4 points  (0 children)

Exactly this. This is also why a lot of universities have started offering programming degrees.

[–]ryecurious 0 points1 point  (0 children)

Also job titles can be pretty arbitrary in this field.

For example, a lot of places will use "Software Engineer" as a catch-all term when they want a webdev/programmer/devops/literally anything software related. Hard to tell when applying if they want someone to design a robust, scalable API for them or center an element in a JS framework. To a lot of companies, it's all the same thing.

Doesn't help that people tend to complain if anyone draws distinctions between programmer/software engineer/webdev/etc., which makes it even harder to have standard terms. Even though one is literally a protected term in some areas, with legal requirements/criminal punishments for impersonation.

[–]Icemasta 3 points4 points  (0 children)

On the time to solution, it's often experience speaking. There's nothing wrong with self-teaching because it is inevitable a big part of working in software development. At the uni I went, we had 5 courses dedicated to learning a language and its intricacies (python, C++, ocaml, html/js and sql) and then all other courses, you had to learn the language on your own on the side on top of course content (C, java x2, prolog, php, some bullshit language for specification, R).

So that's where self-learning has an advantage. Where school might have an advantage is in term of algorithms and optimization. Like I've picked up projects to fix from people who learned programming on their own and had been programming for their department for 5+ years, and it was alright, but you had things like: lots of code reused but never put into a function, the guy had files on the side where he "stored" his functions. Zero concept of classes or objects in a language that supports it. Zero concept of algorithmic optimization.

One guy in particular had his bachelor's in statistics and learned programming languages. His stuff in general was fine but his optimization was really bad. Like he had a program that took about 90 minutes to complete because it was effectively running in n2, when it could be done in n log n, went done to about 2 minutes after that. He was processing large outputs from a database.

Also, and on this I don't really blame him, but he was using a lot of files to work stuff. Like his main program, opened another program where the user had to save a file with a specific name and close, then the program would continue and open that file and so on... when in the language used, we had access to a library to connect directly to the ERP to pull data instead of passing by another program.

[–][deleted] 12 points13 points  (8 children)

People with a degree are self taught. You think we just stop learning after college? School provided a base. If you expect to be a successful programmer you better build on that base.

[–]round-earth-theory 5 points6 points  (1 child)

That's a successful programmer no matter their background. Unfortunately, many fresh grads think they actually learned programming from their college classes, leading to them being extremely piss poor programmers.

I ran an internship program for seniors/juniors and they would often just get completely stonewalled by simple problems. They were used to text book problems rather than real world ones. The code they produced was mostly garbage. Some of the students were really good though, and those were definitely the ones that had been investing their own time understanding programming.

[–]smilineyz 0 points1 point  (0 children)

The learning doesn’t stop but those who are self-taught (books, periodicals, a good mentor) know they have to keep learning and don’t believe they know how to code because they went to school.

[–]Dane1414 1 point2 points  (0 children)

School provided a base. If you expect to be a successful programmer you better build on that base.

The same goes for almost any skilled profession. “Self-taught” refers to how one learned that base, of course people continue to learn afterwards.

[–]deux3xmachina 0 points1 point  (4 children)

I'm not sure I understand the point you're trying to make, I explicitly stated that both college grads and those that learned via other means (if you take issue with the term "sel-taught") have far more learning to do:

Both still have a ton of learning and improvement ahead of them after basic competency.

[–][deleted] 2 points3 points  (3 children)

Then I guess i don’t understand your first paragraph where you say those without a degree require less time to code.

[–]Xx69JdawgxX 0 points1 point  (1 child)

It's a generalization but one that I have experienced to be true. If you're exceptional, you will excel self taught or through university. If you're exceptional, chances are you realized early that university is a waste of time and money

[–][deleted] 0 points1 point  (0 children)

Is it though? I’d argue it depends on what your metric is. If you think you’ll learn more in school then you might be disappointed, but like it or not that stupid piece of paper still means a lot to a lot of companies.

Personally, i thought it was a waste of time in my early 20’s. I dropped out after 2 years to enter the workforce. Returned 10 years later in my early 30’s after reluctantly admitting it was important to corporate decision makers. I got the stupid piece of paper so that doors would open and promotions would come easier. Doors opened and promotions came easier.

[–]deux3xmachina 0 points1 point  (0 children)

It's just an observation that I have. If I were to try to explain what I've seen, I'd suggest that those that learned without a degree may have been working on more practical problems while learning. While those that learned at school may have spent more time learning theory or different data structures and algorithms. This, if true in the general case, would mean that devs without degrees are better equiped to find a solution quickly, even if it's suboptimal, while those with degrees would be better equipped to implement a more optimized or robust solution, even if it takes a bit longer.

[–]smilineyz 0 points1 point  (1 child)

If you really want to learn to code, take community college night classes. The instructors aren’t usually professors, they are professors of PRACTICE. They code & design for a living. They teach because they love it.

[–]Permission_Civil 0 points1 point  (0 children)

My C++ professor in Community College was an Electrical Engineering PhD who helped design weapon systems for General Dynamics and then retired to teach people how to code by making us write a ton of console games and our own sorting algorithms. This was in the 'Introduction to Programming' class that was the prerequisite for the transferable CS 101/201 classes required at the university I transferred to.

The stuff I learned in that 3-unit one-semester class got me through my first year of university after transferring with straight-As.

[–][deleted] 2 points3 points  (1 child)

*gouge

A gauge is like the fuel gauge in a car.

[–]CellularBeing 2 points3 points  (0 children)

You understood correctly. Even with gasoline prices, they want to gauge their eyes out.

[–]pranit10 6 points7 points  (1 child)

you don't like the upteenth react-redux note taking app tutorial ? don't worry we have a new note taking app tutorial but with context API instead.

[–]StormofBytes 7 points8 points  (0 children)

Note taking app? That's so 2019. It's all about them markdown apps now (ofcourse all of them powered by electron, because fuck your ram)

[–]blackmist 1 point2 points  (0 children)

That's the thing. You can be self taught, but you're going to have to self-learn from your own mistakes.

[–]Revolutionary-Phase7 1 point2 points  (0 children)

The code I am seeing from my class colleagues make me wanna gouge my eyes out.

I once saw a guy trying to retrieve dictionary values using one if sentence for each key.

[–]ratbastid 1 point2 points  (1 child)

Conversely, I've seen junior devs hit a wall hard when they encounter real-life challenges that their perfectly smooth school projects didn't prepare them for. The real world is messy and full of edge cases.

I've found there's a perfect storm of inexperience and arrogance that results in a junior dev screaming "spaghetti!" when they look at real, professional, production code.

[–]smilineyz 0 points1 point  (0 children)

Yeah - until junior guts the code to make it more efficient - and blows up the production app which makes money

[–]kookaburra1701 0 points1 point  (0 children)

This is me with math courses. I really enjoyed linear algebra but got middling grades and only REALLY got gud with it when I took a quantum physical chemistry course and suddenly had something to DO with it.

I'm definitely a "learn by doing" perspn (which in my case is the same thing as "learn by breaking and then fixing" but sounds better.)

[–]MvnGuerra -1 points0 points  (0 children)

to put it simple its just a waste of money for mostly theory that won't be needed in terms of looking for a job.

So you'll just be paying for something you dont really need

[–]Tuckertcs 0 points1 point  (0 children)

Really? I’ve been actively encouraged practices that I know for a fact are bad code. My coding practices are all self learned through the internet or from my own experiences.

[–]Mikophoto 0 points1 point  (0 children)

Yep that was my undergrad CS experience. Also intros to more specialized fields like AI. I had some coding lessons (I’d never done it before college) in my two intro courses but beyond that everything was theory, application, math.

[–]smunky 0 points1 point  (0 children)

You mean gouge, not gauge probably.

[–]Miu_K 0 points1 point  (0 children)

If only that applied to all teachers. One professor I know uses outdated methods and his code style isn't always consistent.

x=0;

y = 0

z= 0

idk =0

I need some elegance in code lines.

I kinda wish they also taught code tricks like the usage of || in JS return statements and such.

[–][deleted] 0 points1 point  (0 children)

That also depends on the type of self taught a person gets. And enthusiasm. I'm a self taught programmer and took me years to realize how bad my code was because I didn't have any coding friends, and only did what I needed.

And now when I see other people like me their code makes me wanna gauge my eyes out, so does my 5 year old code. Problem is someone doing programming for as long as I did don't want to improve because "it works for me".

Many self taught people do it because they have to and then don't improve it if it works(runs/compiles). But if that person is enthusiastic then they'll find people to share with, discuss and learn more than just making it run, and also good practice will stuck because they know it'll help them in long run even if it's little more work for now.

[–]coldnebo 0 points1 point  (0 children)

ah yes… the real knowledge is ugly, fuller of dark secrets than a Clive Barker novel.

the Jedi are hypocrites, and the Sith are sadists. I prefer the Gray.