The gap between a professional and an amateur

Hey. I've been a programmer for a little while now, i'm mostly geared towards systems programming and pentesting, however i decided to get into front end to try and work remotely. At this point i'm fairly confident in my knowledge in CSS/HTML/JS, however i don't feel like what i produce is professional, not even close.

This survey, for example: http://codepen.io/Selhar/full/ygGYJO/ (ignore the test suite part, it's mandatory/imported)

I would be bothered to see this survey in a professional website, however i can't pinpoint why. I know this is a very subjective area, however there must be a way to close this gap effectively (that's why i came here). I seem to lack the common sense to identify what my work as a front end developer lacks. In programming i could have specific metrics for performance or elegance, but in front end programming that's more blurred and subjective, which is why i'm struggling to progress after the point i'm at. Any help would be very welcome.

1 Like

What does asking "how many children" have to do with the survey? It seems completely out of context.
I know this is just an example.. but try to keep your surveys realistic.
It bothers me you use "FCC" as a shorthand for Free Code Camp, people could easily mistake it as the government agency.
Also, try changing it from a radio selection to just an input, what if I'm free from 12PM - 3PM and then 2AM - 4AM? I assume you want to know this in your survey.
Instead of insert use a non coding term, or non at all, just "First Name eg. 'John' ".

Wording aside, add a max-width to your text area. It's possible to break the form visually.
If the email input is required.. why does it not have an asterisk next to it? I personally try to avoid marking inputs as "required" and instead mark those optional.

Oh, don't worry about the practical application of the survey, it's an exercise to teach different types of input, the content of each input is irrelevant. The test suite requires you to use certain attributes and tags, the content of which can be anything you like.
My question was related to the aesthetic aspect of it, which is what is bothering me in my execution of this exercise.

The content is relevant in the design. Try changing it and see that it will look better.
The aesthetics are alright, I don't see any major issues with them, perhaps tweak the margins a little bit? i.e. not 30px but rather 28.. 24..


I'm mediocre at best at web design, but maybe my comments could be helpful? Who knows, ignore them if you don't find them to be constructive. Yes I used paint to do this, judge me as you will.

2 Likes

I have hacked BIOS for more performance. I had to learn X86 assembly and learn how to read base64. Do I call myself professional? I don't even call myself amateur! It was a freak accident that what I was doing worked, plain and simple.

I think its like this: If you do something for 10000 hours you are an expert on it. You have gone through everything you can and worked out all the kinks you weren't sure how to go through. Professional and Amateur have nothing to do with being an expert. When you're an expert you don't have to compare your work to others who do it differently and you don't have to compare your code, scrud for scrud, to anyone elses. Your stuff is yours and thats how it is. When you have 10000 hours into it, your attitude is either amateur or professional, but your work itself is expert level and pristine.

It sounds like you're looking for aesthetic advice. From a functional standpoint, this all seems fairly standard, I didn't see anything bad with it per se.

I would likely make these changes if I was in your position:

  1. Make each radio/checkbox on it's own line. The options become more legible/"skimmable" on different lines, which is good for filling out a survey quickly (Also easier to style responsively, win/win for you as a dev; especially when the client inevitably wants more options and/or decides to lengthen one). Also adjust the styling so that clicking the text will select the option.

  2. Refine your colors a bit. The green at the top feels a bit "stock green" if that makes sense; like in the days before hex codes when you had to put in names of web-safe colors. I would change it to be maybe something like #145943? All I did to get that color was move the slider a little towards a blue shift and desaturated it a bit; but I think these kind of subtle color changes can make a difference. Also, can you tell me why you made the fieldset area darker than the body color? It's not a bad thing per se, some people prefer darker sites, but it feels a little bit like the form doesn't belong to the rest of the page if that makes sense (almost like it's been i-framed in?). Maybe try a lighter shade of gray like #eee and see if it feels more cohesive with the white background.

  3. The submit button could use a hover and active state to further inform the user that the element is interactive. It's pretty clear it's a button as is, but small changes on hover/click can help make the experience feel more rewarding.

Hopefully that's helpful?

5 Likes

Well said. Expertise is a degree of experience. Begin a professional means you get paid for what ever degree of experience you have.

1 Like

I define pro as somebody that does it and gets paid to do so and amateurs do it for fun and has very little to do with skill.

It's possible for an amateur to output better work than a pro. When I tried some photography, I did it very much in the mindset on Ansel Adams. There are "pro" developers that just have quick 'n dirty hackery code, have you ever played an Ubisoft Game?

But I think you mean something excellent craftsmanship. Elegant and easy to modify and maintain.

I would add that the valued skills in professional development are mostly around product lifecycle and people skills. If you know how to use version control, coordinate with other developers, document your work regularly and accurately, and provide plus accept constructive peer review, then you have the bulk of the skills needed to get paid as a developer.

There have been people that I've worked with that simply don't know how to take responsibility for their work. I would describe these people as unprofessional, not unskilled.

Oh, it totally is, i copied the color from www.freecodecamp.com , they use the stock "darkgreen" color, so i tried to make the rest of the site work around that. But maybe that was overthinking.

At this point it was trial and error. The previous version i had the fieldset green/almost white, and the input fields a little darker green, with a patterned green background. But that was pretty...strange. Changing to black was a bit more pleasant to read, i guess.

Thanks a lot by the way, i'll make the adjustments.

It was pretty helpful, thanks a lot, i hadn't noticed the alignment problems at all. And the controls weren't showing in chromium so i didn't think about them, normalize should fix the issue. Thanks a lot again.

I probably should have used "professional-looking" instead of professional. I didn't mean it in the sense of work ethics or behavior, just aesthetics really. The work of a designer would be more polished, that's all i meant.

1 Like

While I am unqualified to comment on your thread, that won't stop me from commenting on the title.

3 Likes

I need to get that in a really high resolution to print it out on a poster. That's great.

1 Like

Professional: people are willing to pay you to do things they don't know how to do and/or you can ask people to pay you to offer your knowledge.

Amateur: you do work for free, waiting to gain enough experience and authority to be a professional il the future.

Hey. I made another project after taking in your advice and i'd while i'm quite more satisfied with this one, i still could not solve some of the problems i came across.

  1. What is the minimum width and aspect ratio that most websites support? After 568px it gets quite easy to support, but the difficulty below that is absurd. At 320x it's almost the effort of making another site, specially when background images are involved.

  2. In media queries i had to set everything to !important in order for the mobile-version of the website to work. Is this common practice?

  3. Is it a problem if i don't use "labels" in an input field? Instead use just placeholder text.

  4. I had quite a bit of trouble in image sizing, how do people usually choose images for a responsive website? Is it one huge image or a bunch of images for each resolution? What i did was look for an aspect ratio that is common enough (16:9), then the images would trickle down properly. For thumbnails i had to manually resize them though, however i'm not sure if that's common practice.

  5. I tried really hard to fade-in the gallery images, but i couldn't figure it out how to do it properly. Any suggestions on how to do it? All that i tried ended up messing with the buttons for the gallery, instead of just the background-image.

Besides that, i'd also like to know if there's anything you'd change about the page, from design choices (fonts, colors, etc) to coding choices (code readability, efficiency, etc..)

Here is the codepen: http://codepen.io/Selhar/full/WRqZjr/
You can view the code here : http://codepen.io/Selhar/pen/WRqZjr/
(responsivity breaks when the length is weird like in the editor view, but i couldn't find any other scenario where it broke, so i didn't mind)

Thanks a lot, and sorry for asking so many questions.

@DizzySkin @kreestuh @sarhatabaot

2 Likes

Hi Selhar,

  1. It's more about aspect ratio than pixel width, your cupcake demo nails this as far as I'm concerned at the low end, however at 1440 wide on a 27" screen I find the input field on the right as compared to the text on the left leave and uncomfortably huge gap. It's rather distracting trying to read one and then dragging my eyes over the page to the other.

  2. I don't observe a need for !important in chrome. I believe that you can control this via to the specificity of the rule. If you give your rule higher specificity than the rule it is overriding then you won't need to use !important. I.E. div.cover-right instead of .cover-right should be enough. That said it's been a while and I could be confusing myself on this one, so your mileage may vary.

  3. Sorry, got nothing on this one.

  4. Yes, multiple images.

  5. Your slider is nested within the div you are controlling the effect for. Create a nested img tag to hold the image instead of using the background-image of the parent div. Don't forget the other option of preloading the images in hidden img tags.


Comments on the ES:

Good, but you've made some ES fax pa.

  • It is more typical to use camel casing for function names than underscores. I'm not that bothered by this because you have been consistent in using underscores, and consistency matters most for code style.
  • You are leaking variables to global scope. E.G. line 56 style = should start var style =.
  • Line 62 (document.readyState != 'loading') should use !==. Only use weakly typed equality when comparing to null to indicate that you also want to compare to undefined implicitly.
  • Your use of double and single quote for strings is mixed. Personally, I stick to single quote for all strings in ES.
  • enum is the wrong name for your images object. This is a dictionary or a map.
  • Line 28 for loop could be done with two jQuery calls in a slightly more readable way.

I would also suggest considering modularising your code. Either use the ES5 format of a nested function class or use ES6 classes. If you want compatibility with older browsers use bable.

I'm much more confident in my ES than my CSS so if you have any questsions about it then shoot.

1 Like

What is the minimum width and aspect ratio that most websites support? After 568px it gets quite easy to support, but the difficulty below that is absurd. At 320x it's almost the effort of making another site, specially when background images are involved.

Here's a little information about common screen sizes:
* World Wide Web Consortium: https://www.w3schools.com/browsers/browsers_display.asp.
* CSS Tricks: https://css-tricks.com/snippets/css/media-queries-for-standard-devices/

Generally I will design down to around 360px wide, which works for most android devices I've tested on (portrait-mode). IIRC 320px is for apple devices (also portrait mode). But really the important thing to consider is your target audience. If you have analytics, take a look at what devices are being used the most then, if necessary, create media queries to cater to those sizes.

For future projects, you may also consider using a framework like Twitter Bootstrap or Bulma to create responsive layouts. They add a bit of overhead, but are really useful for creating rapid prototypes that can work in variety of sizes. Bootstrap is fairly heavy (though you can customize your download), where Bulma is a bit more bare bones.

In media queries i had to set everything to !important in order for the mobile-version of the website to work. Is this common practice?

Hmm, not usually. Try re-ordering your styles? I will usually isolate my media queries to their own stylesheet, or at the very least put them at the very bottom of my main CSS document (after all the main desktop styles), with a comment mentioning what sizes and sections they are for.

Is it a problem if i don't use "labels" in an input field? Instead use just placeholder text.

You can technically get by without them, but it is bad for accessibility. Screen readers don't see placeholder text, they need the label. Instead you would create a class to apply to the label that would still allow screenreaders to access the text:

.visuallyhidden { 
  position: absolute; 
  overflow: hidden; 
  clip: rect(0 0 0 0); 
  height: 1px; width: 1px; 
  margin: -1px; padding: 0; border: 0; 
}

I had quite a bit of trouble in image sizing, how do people usually choose images for a responsive website? Is it one huge image or a bunch of images for each resolution? What i did was look for an aspect ratio that is common enough (16:9), then the images would trickle down properly. For thumbnails i had to manually resize them though, however I'm not sure if that's common practice.

It's almost never good to have multiples of one image if you can help it. Each new image is a new HTTP request, which slows down your load time -- and for images that aren't even seen by the user depending on their screen size, that's worse. If at all possible, just use one.

I have to say that working with images is one of the least fun parts of the job, as there are a million ways to handle them depending on what you are doing. Also clients can be persnickety about how images crop at various sizes, and sometimes there just isn't a good fix for that if you don't want a sidescroll lol. You'll figure it out as you get more experience though.


Design wise, I think this feels better than your first attempt, much more cohesive. Some notes:

  1. This is just be me being stupid, I'm 99% sure, but it wasn't immediately apparent to me that you needed to scroll down to see the rest of the page. I saw the yellow bar the bottom and initially assumed it was a slider timer, and the background image was going to change. I might suggest either adding in a small arrow icon at the bottom of the header section, or perhaps shortening the height of the header so the user can see more of the yellow section below.

  2. The letter-spacing on the body text feels a bit too wide. Usually I like ultra-wide kerning for headlines only; in body text it feels like you're trying to provide e m p h a s i s t o a l l t h e t e x t.

  3. And finally, a general note on hierarchy: I know you are probably doing this just to learn the more technical side, but try to consider what information a client would actually want if this were a real site: "introduction/about my product, product photography, sign up, navigation, testimonials, contact info" etc etc. Then think about in what order the end user would want to access that information if they were visiting the site for the first time. The more important the information, the higher up on the page it should be.

For example, on your cupcake site, you have the about us text at the top, which is good, but is it more important than the actual sign up for the service? Should the "about" blurb come before or after the signup? One could make an argument for both options, but you should have a rationale for your design choice either way. Consider questions like that when designing and developing and you'll be miles ahead of most newbies.

Hope that was helpful and not just a wall of text? :p

3 Likes

Here's a demo that has the gallery working with <img> instead of background-image. This also allowed me get rid of the URI map in the ES. http://codepen.io/anon/pen/QpbGyr

I didn't change anything else, so this could still (probably even more so) benefit from jQuery. Actually, I probably broke something or other like the targeted media setup. So demo is the key word here. I also know for a fact that this won't work on IE6, but no good website does so that can only be a good thing.

2 Likes