-
-
Notifications
You must be signed in to change notification settings - Fork 654
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[V3] Concept Exercises #1389
Comments
A quick start of possible concept exercises. To be expanded as we go. Mainly as a starting point for tomorrows meeting. |
Would |
I'd also add manipulation with JSON |
Since this is about concept exercises... we will need to split it up. I think there should be a lot of concept exercises on |
Did I get this right? Or do you mean: JSON Handling? |
sorry, |
I added some of them here as they were missing: https://github.com/exercism/v3/issues/167 |
From my work on exercism/v3#239 I got to think quite a bit more.
Using Ranging over a string gives be I think we should restart this issue and start over. Remove all the concept exercises we gathered here and start writing down the issues for creating a concept exercise instead. I'd pick a concept I want to take on and create an exercise issue based on that (or multiple if it starts to become too large). Then I'd think really hard on what this exercise should teach, what it shouldn't. Maybe already implement some code I'd want to see as a solution, to see what concepts it depends on (like indexing into slices in my If the concept exercise is pretty much well defined (just the issue, but with clear definitions concept(s) it will teach and its prerequisites), then make a summary of that in this issue as a comment. Then I'll add it to the description above. This is a suggestion for now. So I'd like to know what you think! |
So I think this is a perfectly reasonable thing to do! I'd not throw away this exercise completely, as it can still be very useful later, but starting with the basic concepts and building on them is also how I approached the C# track and that worked well for me personally. |
A lot of new exercises have been added in the description. All with the status π΄ need issues with specs. If you want to work on one, add a comment to this issue (#212) naming the one you want to work on (also check if somebody else already works on it), and then create the specification issue for the new concept exercise using the |
I'm going to work on |
@tehsphinx Would it perhaps make sense to link to issues from this list? E.g. any π issue will have an accompanying issue, right? If so, it might make sense to link to it directly from this list. |
Added issue links in the description. |
Great! |
To give a better overview of what's already implemented etc there is a roadmap document now and a new issue for discussions: #1886 |
Go Concept Exercises
Exercise Flow
Note: To request a change in the flow, comment on this issue.
Exercise Status
Icon Legend
basics
focus: some basics as a starting point. packages, variables, basic functions, basic comments
thoughts: The introductions to the mentioned topics are only rudimentary.
concepts used: packages, variables, functions, comments
status: π
issue: exercism/v3#1438
comments
focus: comments in Go
thoughts: comments on exported identifiers, shape of package comments and function comments, golint, godoc (?)
concepts used: β
status: π
issue: exercism/v3#843
code-formatting
focus: code formatting in Go
thoughts: usage of gofmt, auto-format on save in different IDEs, command line usage
concepts used: β
status: π΄
types
note: will probably be eliminated
focus: very basic introduction to Go's types, declaring variables and defining custom types.
concepts used: β
status: π
issue: #1378
numbers
focus: int and float64
concepts used:
numbers
,type conversion
,assignment
status: β
issue: exercism/v3#371
numbers-floating-point
focus: more in-depth intro to floats. float64 was briefly introduced in
numbers
exercise.concepts used: β
status: π
issue: #1387
constants
focus: introduction to constants
thoughts: applies to
strings
,numbers
,errors
, ..., notmaps
,slices
, ..., usage ofiota
(exercise should only depend on numbers: int, float64)concepts used: β
status: π΄
functions
focus: introduction to functions in Go
concepts used: β
status: π
issue: #1383
anonymous-functions
focus: introduction to anonymous functions
thoughts: β
concepts used: β
status: π
issue: #1377
conditionals
focus: introduction to
if
andswitch
concepts used: β
status: π
issue: exercism/v3#428
iteration
focus: introduction to the
for
loop (no range loop)concepts used:
conditionals
,numbers
,functions
status: π
issue: #1380
basic-slices
focus: working with slices. instantiate (len, cap), append, set single value, read value, remove value, taking length
concepts used:
iteration
,functions
,conditionals
,numbers
status: β
issue: exercism/v3#530
maps
focus: introduction to maps
concepts used:
functions
,strings
,integers
,conditionals
status: π
issue: exercism/v3#427
range-iteration
focus: introduction to the
for range
loop (no channel reading)concepts used: β
status: π
issue: #1381
bytes-and-runes
focus: special intro to bytes and runes and slices of bytes and runes
concepts used: β
status: π
issue: #1382
basic-strings
focus: string manipulation and formatting
concepts used:
string manipulation
,string formatting
,slices
,type conversion
,conditionals
,functions
status: β
issue: exercism/v3#237
nil
focus: introduction to nil, default values
thoughts: only pointers can be
nil
, types that are actually pointers:map
,slice
,channel
, etc (can also be nil), default values for other types (string, numbers, bool, etc)concepts used: β
status: π
issue: #1379
pointers
focus: introduction to pointers
thoughts: reference to memory address, pass by reference/pass by value, garbage collector
concepts used: β
status: π
issue: #1376
errors
focus: introduction to errors
thoughts: create errors (errors.New, fmt.Errorf), typed errors and when to use them (public constant errors)
concepts used: β
status: π
issue: exercism/v3#846
advanced-errors
focus: introduction to custom errors
thoughts: custom error types and when to use them (custom types implementing
error
interface), any type can be used as an error when implementing theError() string
functionconcepts used: β
status: π
issue: #1375
error-handling
focus: introduction to error handling
thoughts:
if err != nil
, return or handle -- not both (logging is handling!), don't ignore errors, every function that can fail should return an error, error always last return valueconcepts used: β
status: π
issue: #1374
panic-and-recover
focus: introduction to panics
thoughts: how to
panic
, don'tpanic
/when to panic,recover
/when to recover, a panic is a bug and should be fixedconcepts used: β
status: π
issue: #1373
advanced-strings
focus: iterating strings, immutability of strings, advanced formatting
concepts used: β
status: π
issue: #1386
time-and-duration
focus: working with Time and Duration
thoughts: calculation (diff, since), comparison (before, after), duration constants (second, hour, nanosecond, ...), timezones, formatting, parsing
concepts used: β
use parts of: C# datetimes
status: π΄
application-timing
focus: time related application concepts
thoughts: sleep, time.After, ticker, timer
concepts used: β
status: π΄
structs
focus: introduction to structs
thoughts: structs, fields, (not methods), instantiation, default values: NewFunc (?), field usage, exported and private (?)
concepts used: β
status: π΄
methods
focus: introduction to methods
thoughts: can be attached to any type defined in the same package.
method pointer
vsvalue receiver
, exported and private (?), methods on structs: Go's "classes" (?)concepts used: β
copy: C# classes
status: π΄
goroutines
focus: introduction to goroutines
thoughts: start a goroutine, start goroutines in a loop (references), async: no telling what happens first
concepts used: β
status: π΄
channels
focus: introduction to channels
thoughts: unbuffered channels, reading and writing (no iterating channels, no select)
concepts used: β
status: π΄
channel-select
focus: introduction to the select statement
thoughts: β
concepts used: β
status: π΄
waitgroups
focus: usage of WaitGroup
thoughts: β
concepts used: β
status: π΄
context
focus: introduction to different types of contexts
thoughts: background/todo, timeout, cancel, values in contexts (when/why not to use?)
concepts used: β
status: π΄
anonymous-functions
focus: introduction to anonymous functions
thoughts: β
concepts used: β
status: π΄
defer
focus: introduction to defer
thoughts: β
concepts used: β
status: π΄
mutex
focus: introduction to mutexes
thoughts: Mutex/RWMutex, defer
concepts used: β
status: π΄
empty-interface
focus: introduction to the empty interface
thoughts: can hold any value but hard/slow to work with, should be used rarely
concepts used: β
status: π΄
interfaces
focus: introduction to interfaces
thoughts: implicit implementation of interfaces, single Method interface, some common interfaces: Reader, Writer, error
concepts used: β
status: π΄
reflection
focus: introduction to reflection
thoughts: intro to reflect package, some basic reflection, ...β(not type switch, type casting, etc.)
concepts used: β
status: π΄
type-switch
focus: introduction to type switch
thoughts: probably based on
conditionals
(which introducesswitch
),numbers
andempty-interface
concepts used: β
status: π΄
type-casting
focus: introduction to type casting
thoughts: β
concepts used: β
status: π΄
The text was updated successfully, but these errors were encountered: